当我编译下面的 C 程序时,我得到这个警告:
“noreturn”函数确实返回
。这是函数:
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
attribute 完成的:
void func() __attribute__ ((noreturn));
如果尽管有 noreturn
属性,函数确实返回,编译器会发出您看到的警告(在您的情况下会转换为错误)。
由于您不太可能在代码中使用 noreturn
,可能的解释是您有一个名称与标准 noreturn
函数冲突的函数,如下面的例子:
#include <stdlib.h>
void exit(int) {
} // warning: 'noreturn' function does return [enabled by default]
在这里,我的exit
与exit(3)
冲突.
这种冲突的另一个明显候选者是 abort(3)
.
当然,如果您的函数实际上被称为 hello()
,那么罪魁祸首几乎肯定在您的代码库中的某个地方。
关于c - “noreturn”函数确实返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15964219/