可能重复:
Noreturn属性的重点是什么?
C11引入了_Noreturn属性来指示函数永远不会返回.
除了源代码中的文档值之外,该属性还提供了哪些其他好处,以及为什么要使用它?
Mat*_*lia 22
如果函数无条件地调用_Noreturn函数,编译器将能够理解:
最重要的是,知道来自函数的正常流量被中断,它将能够避免关于丢失返回值,未初始化变量等的虚假警告.
这对于静态代码分析器尤其重要 - 一旦我们标记了我们的die函数(记录致命错误并终止应用程序),CLang静态分析器在我们的大型应用程序中给出的误报数量就会大大减少noreturn.
可能还有一些其他优化可用 - 因为函数永远不会返回,所以不需要在堆栈上推送返回地址,保存寄存器的状态等等,所需要的只是传递参数并执行a a jmpstart功能,无需担心退货和退货后清理.但是,当然,由于电话是一次性的,因此在这里挤压的表现几乎可以忽略不计.
小智 6
__attribute__((noreturn))或_Noreturn对以下功能有用die():
static __attribute__((noreturn)) void die(const char *fmt, ...) {
/* print a formatted error message and exit */
exit(EXIT_FAILURE);
}
/* And let's say in main() you would want to exit because of an error but unforunately GCC complains about return value. */
int main()
{
if (!whatever)
die("a nasty error message goes here\n");
}
Run Code Online (Sandbox Code Playgroud)
并且还用于所述的优化.