|
_Noreturn 声明一个函数永远不回返回. 此修饰字有两个目的:1.如果一个函数本来就是设计来不返回,使用了此修饰符可以使得编译器不要报警了; 2.进一步为了优化而提供信息.某些优化选项必须要确定该函数不返回才来进行.比如:
_Noreturn void func (); //C11, func never returns
Technical Report 24731-1, 现已成为C11的一部分, 定义了标准C库函数中的字符操作函数的边界检查版本. 边界检查的版本在原来的函数名后资家了_s的后缀.
比如strcat()和strncpy()的边界检查版本分别为:strcat_s()和strncpy_s(). 大多数边界检查的版本会增加一个参数以指示需要使用缓冲区的最大尺寸. 而且大多数这些函数还会进行一些其他运行时检查以侦测种种不同的运行时异常.
来看两个例子:
//C11, safe version of strcat
errno_t strcat_s(char * restrict s1,
rsize_t s1max,
const char * restrict s2);
strcat_s() 最多拷贝s1max 字节的数据到s1.
第二个函数strcpy_s()需要s1max比s2更长(精确地讲,s1_max必须大于strnlen_s(s2, s1max)), 以防止写操作发生在边界之外:
//C11, safe version of strcpy
errno_t strcpy_s(char * restrict s1,
rsize_t s1max,
const char * restrict s2);
这些函数最早是由Microsoft的Visual C++ 团队开发的. C11中的实现与Microsoft的类似但有些改动.