gpt4 book ai didi

c - 是否有一个属性告诉编译器忽略缺少的 return 语句?

转载 作者:太空狗 更新时间:2023-10-29 15:03:16 25 4
gpt4 key购买 nike

我不认为这是重复的,因为函数确实返回了正确的路径。使用属性 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)),特别是 gccclangtinycc,但它是一个编译器具体扩展名。
  • 重新组织代码,让编译器看到函数总是返回。

修改后的版本:

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com