gpt4 book ai didi

返回 void 的函数 g 可以返回 f() 吗? f 何时返回 void?

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

考虑以下片段:

void f(void);

void g(…)
{

return f();

}

根据 C11,这个 return f(); 有效吗?

我不提倡使用这种模式:如果它能起作用,它显然等同于 f(); return;(如果它位于函数 g() 的末尾,则 return; 本身将是多余的)。我在 C 程序静态分析的上下文中问这个问题,C 代码已经由其他人编写,问题是根据标准确定它是否有效。

我会将 C11 6.8.6.4:1 解释为它是非标准的,应该被静态拒绝。是否有可能以不同的方式解释它(我在实际的高质量源代码中发现了这种模式)?

Constraints

A return statement with an expression shall not appear in a function whose return type is void. A return statement without an expression shall only appear in a function whose return type is void.

最佳答案

return 之后的任何内容都是表达式。

6.8.6:1 跳转语句

Syntax     ...   return expressionopt; 

And standard says that:

A return statement with an expression shall not appear in a function whose return type is void. ....

f() is also an expression here. The compiler should raise a warning

[Warning] ISO C forbids 'return' with expression, in function returning void [-pedantic]

关于返回 void 的函数 g 可以返回 f() 吗? f 何时返回 void?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22508978/

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