我不认为这是重复的,因为函数确实返回了正确的路径。使用属性 no-return
允许编译器在函数永不返回的假设下进行优化,但这里不是这种情况。
我得到了返回指针或调用另一个函数退出程序的 C 代码。这是在 if
语句中,因此要么返回结果,要么退出。当该函数返回一个 void *
时,编译器会警告该函数可能不会返回值(这当然是真的):
错误:控制到达非 void 函数的末尾 [-Werror=return-type]
我可以通过在函数末尾添加 return *temp;
来解决这个问题,但我想通过使用诸如未使用的变量属性之类的东西来明确我的意图:
__attribute__((__unused__))
这样我就可以保留 -Wall
并且不必添加不必要的或可能令人困惑的代码。
如果有更好的方式来表达这种意图,我也愿意重写代码。
代码看起来像这样:
void *get_memory() {
void *temp = malloc(100);
if (temp) {
// do some setup work
return temp;
} else {
exit_program_with_epic_fail();
}
// Compiler warns if the following line isn't present
return temp;
}
最佳答案
有两种方法可以消除警告:
- 在 C11 中用适当的属性
_Noreturn
标记exit_program_with_epic_fail()
函数,但没有可移植的方法来为 C11 之前的编译器执行此操作。许多编译器支持__attribute__((noreturn))
,特别是 gcc、clang 和 tinycc,但它是一个编译器具体扩展名。 - 重新组织代码,让编译器看到函数总是返回。
修改后的版本:
void *get_memory(void) {
void *temp = malloc(100);
if (!temp) {
exit_program_with_epic_fail();
}
// do some setup work
return temp;
}
关于c - 是否有一个属性告诉编译器忽略缺少的 return 语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56768780/