发布于 2012-12-03 20:48:54
如果一个函数无条件地调用一个_Noreturn函数,编译器将能够理解:
noreturn时,我们的大型应用程序中的die静态分析器给出的假阳性数会显著下降。可能还有其他一些优化--因为函数永远不会返回,所以不需要将返回地址推到堆栈上,保存寄存器的状态等等,只需要传递参数并在函数开始时执行jmp,而不必担心返回和返回后的清理。但当然,既然这个电话是一次性的,那么挤在这里的表现几乎可以忽略不计。
发布于 2012-12-03 21:31:10
__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");
}也用于优化,如所述。
发布于 2012-12-03 20:49:55
它允许编译器进行额外的优化。看看这里现在支持的GCC的noreturn属性(语义可能相同)。
https://stackoverflow.com/questions/13691361
复制相似问题