Pas*_*uoq 26 c language-lawyer c11
请考虑以下代码段:
void f(void);
void g(…)
{
…
return f();
…
}
Run Code Online (Sandbox Code Playgroud)
return f();根据C11,这是否有效?
我并不主张使用这种模式:如果它完全起作用,它显然等同于f(); return;(return;如果它在函数的末尾,它本身将是多余的g()).我在C程序的静态分析的上下文中提出这个问题,其中C代码已经由其他人编写,问题是根据标准判断它是否有效.
我认为C11 6.8.6.4:1意味着它是非标准的,应该被静态拒绝.是否有可能以不同的方式解释它(我在实际和其他高质量的源代码中找到了这种模式)?
约束
带有表达式的return语句不应出现在返回类型为void的函数中.不带表达式的return语句只能出现在返回类型为void的函数中.
hac*_*cks 18
之后的任何事情return都是表达.
Syntax ... return expressionopt;
标准说:
带有表达式的 return语句不应出现在返回类型为void的函数中.....
f()这也是一种表达方式.编译器应该发出警告
[Warning] ISO C forbids 'return' with expression, in function returning void [-pedantic]
Run Code Online (Sandbox Code Playgroud)
Jen*_*edt 10
这显然是违反约束的行为,特别是考虑到这一点
6.3.2.2 void:void表达式(具有void类型的表达式)的(不存在)值不得以任何方式使用,
这意味着不完整类型void是一个死胡同,不能为任何目的重复使用.
| 归档时间: |
|
| 查看次数: |
1818 次 |
| 最近记录: |