C11 的变长数组
C11 的变长数组 C 语言新版本支持变长的数组(variable length array,简称VLA),数组的长度可以用一个变量来决定。 如果 C 编译器不支持变长数组,那么宏定义 __STDC_NO_VLA__ 就必须定义为 1。使用下面的代码可以检查是否支持变长数组: 12345#ifdef __STDC_NO_VLA__ printf("不支持变长数组 \n&quo...
C11 的变长数组 C 语言新版本支持变长的数组(variable length array,简称VLA),数组的长度可以用一个变量来决定。 如果 C 编译器不支持变长数组,那么宏定义 __STDC_NO_VLA__ 就必须定义为 1。使用下面的代码可以检查是否支持变长数组: 12345#ifdef __STDC_NO_VLA__ printf("不支持变长数组 \n&quo...
前言我记得最早加入安全边界检查函数的是微软,在一些涉及缓冲区的基本 C 函数中,一律加上了 _s 后缀的、具有安全边界检查功能的函数。有少部分与之前微软定义的不兼容,这里以 C11 标准为准。 C11 标准引入了这些函数,它们比之前习惯性使用的传统函数更加安全,可以防止出现缓冲区溢出问题错误的发生。但是,能不能做到真正安全,还是需要编码者更细心地正确去编码。 不可理喻的是,C11 标准居然把...
__DATA__此宏是编译器预定义的。表示当前的日期的一个字符串。 __FILE__此宏是编译器预定义的。表示当前的源文件名的一个字符串。 __LINE__此宏是编译器预定义的。表示当前的行号的的一个整数常量。 __TIME__此宏是编译器预定义的。表示当前的时间(精确到秒)的一个字符串。 __FUNCTION__此宏是编译器预定义的。表示当前函数的函数名。 __func__此宏是编译器预定...
C99 标准中,给 C 语言引入了 restrict 限定符,与 const 和 volatile 不同的是,restrict 限定符只能修饰指针。 restrict 限定符告诉编译器,该指针指向的对象,只能通过该指针进行唯一引用,不能通过别的指针直接或者间接的方式进行修改该对象。restrict 限定符可以让编译器对指针操作进行放心的优化,以提升性能。 举以下例子说明,以得到一个详细的认知...