‘noreturn’function确实会回归
当我编译下面的C程序时,我收到这个警告: 'noreturn' function does return
。 这是function:
void hello(void){ int i; i=1; }
为什么会这样? 对此函数的所有调用都是hello();
编辑:完整的错误输出:
home.c: In function 'hello': hhme.c:838:7: error: variable 'i' set but not used [-Werror=unused-but-set-variable] home.c:840:1: error: 'noreturn' function does return [-Werror] cc1: all warnings being treated as errors make: *** [home.o] Error 1
可以告诉gcc
特定函数永远不会返回。 这允许某些优化,并有助于避免未初始化变量的虚假警告。
这是使用noreturn
属性完成的:
void func() __attribute__ ((noreturn));
如果函数确实在noreturn
属性的情况下返回,则编译器会发出您正在看到的警告(在您的情况下会转换为错误)。
由于您不太可能在代码中使用noreturn
,可能的解释是您有一个名称与标准noreturn
函数冲突的函数,如下例所示:
#include void exit(int) { } // warning: 'noreturn' function does return [enabled by default]
在这里,我的exit
与exit(3)
冲突。
这种冲突的另一个显而易见的候选人是abort(3)
。
当然,如果你的函数实际上被称为hello()
,那么罪魁祸首几乎肯定在你的代码库中。
最有可能的是,该函数标有__attribute__((noreturn))
。 但是,它实际上确实返回(当控制到达irs体的末端时,因为它不进入无限循环,它不会调用其他“noreturn”函数等)
我没有看到你的观点1.将函数标记为不返回,2。编写一个什么都不做的函数 – 可能你可以消除这两个函数?