c – 为什么在Ideone上编译?
好的,所以我在
Ideone上搞砸了,不小心提交了这段代码,但令我吃惊的是,它实际编译并运行了一个0,0
here的值.
#include <iostream> using namespace std; const int five( ) { const int i = 5; } int main() { cout << five( ) << endl; return 0; } 然后,我在Visual Studio中尝试这样做,而在Codepad,但是由于five()不返回值,所以无法编译,因为可以预期.我的问题是,当然,为什么这个编译在Ideone,即使代码,我的理解是错误的,不应该编译. 解决方法
简单(来自C 11 6.6.3“退货单”):
所以编译器几乎被允许做任何它想要的.显然,诊断是我从编译器中选择的,但是有时候可能很难诊断(比如当返回到条件逻辑内部时,函数的“结束”将永远不会达到). 请注意,我使用GCC 4.6.1(使用墙选项)得到以下警告: test.cpp:8:1: warning: no return statement in function returning non-void [-Wreturn-type] 我不知道什么选择ideone传递给GCC(我想象 – 将会做同样的4.3.4版本,ideone使用). 一些相关信息: 在C中,在某些情况下声明为返回值实际不这样做的函数是可行的;在C中,如果实际使用函数的返回值,它只会导致未定义的行为.预标准C并不总是支持void类型,所以没有返回任何东西的函数通常被声明为显式或隐式地返回int.来自C99 6.9.1 / 12“函数定义”:如果达到终止函数的函数,并且调用者使用函数调用的值,则行为是未定义的. 另外,正如几个评论中所提到的,流出main()的结尾被C和C99及更高版本特别处理. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- ios – 是否可以通过Lightning数字AV适配器使用Xcode进行调
- 使用DTD,是否可以声明允许任何XML内容的元素?
- ruby-on-rails – Psych :: SyntaxError无法解析YAML
- ruby-on-rails – 为rails中的用户模型创建配置文件
- ruby-on-rails – 如何解决这个错误? config.gem:未包装的
- 我应该使用PostgreSQL位字符串吗?
- FusionCharts flash中文问题,X 轴正常,Y轴不能显示中文
- 数组 – 新的Swift数组语法和通用函数
- 生成XML时如何去除BOM
- reactjs – react-router:动态内容未找到(404)?