-4 c return return-value
更新2018年:这是我写的一个老问题,对C的理解有所减少.请不要贬低.
当我使用以下代码时:
int mytest(void);
int main(void)
{
mytest();
return;
}
int mytest(void)
{
return 3;
}
Run Code Online (Sandbox Code Playgroud)
什么是回报值main?我明白这是
编辑:大评论:我知道这是未定义的行为.从逻辑上讲,将产生什么样的回报值?
编辑2:示例:http://ideone.com/fAxnNn
这不是一个期望的行为,虽然没有明确提及未定义的行为.这是"违反约束".
引用C11,第6.8.6.4章
[...]
return没有表达式的语句只能出现在返回类型为的函数中void.
并且,从章节§5.1.1.3,诊断,
如果预处理转换单元或转换单元包含违反任何语法规则或约束的情况,则符合要求的实现应生成至少一条诊断消息(以实现定义的方式标识),即使该行为也明确指定为未定义或实现 - 定义.[....]
在这种情况下,编译器继续生成可执行代码,因此,执行此二进制文件会调用未定义的行为.
底线,main()预计返回一个int不应该没有return表达式的语句.不要写那样的代码.
[注意:根据这个讨论,有一个强烈的概念,即这是未定义的行为,但仍然,标准中没有明确提及.