- android - RelativeLayout 背景可绘制重叠内容
- android - 如何链接 cpufeatures lib 以获取 native android 库?
- java - OnItemClickListener 不起作用,但 OnLongItemClickListener 在自定义 ListView 中起作用
- java - Android 文件转字符串
好吧,我在 Ideone 上搞砸了并意外提交了这段代码,但令我惊讶的是它实际上编译并运行输出值 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“返回语句”):
Flowing off the end of a function is equivalent to a return with no value; this results in undefined behavior in a value-returning function.
所以编译器几乎可以为所欲为。显然,我更喜欢编译器提供的诊断功能,但有时诊断起来可能很困难(比如当返回在条件逻辑中时,函数的“结束”将永远无法到达)。
请注意,我在 GCC 4.6.1 中收到以下警告(使用 Wall
选项):
test.cpp:8:1: warning: no return statement in function returning non-void [-Wreturn-type]
我不确定 ideone 向 GCC 传递了哪些选项(我想 -Wall
会对 ideone 使用的 4.3.4 版本做同样的事情)。
一些相关信息:
在 C 语言中,声明返回值的函数在某些情况下实际上不返回值是可以的;在 C 语言中,如果函数的返回值确实被使用,它只会导致未定义的行为。准标准 C 并不总是支持 void
类型,因此不返回任何内容的函数通常被显式或隐式声明为返回 int
。来自 C99 6.9.1/12“函数定义”:如果到达终止函数的 }
,并且函数调用的值被调用者使用,则行为未定义。
此外,正如一些评论中提到的,main()
末尾的流被 C++ 和 C99 及更高版本特殊处理。
关于c++ - 为什么要在 Ideone 上编译?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11495292/
有人可以告诉我为什么会发生这种情况吗?这里出了什么问题: 我必须打印字符串的一部分,其中要打印的字符串的起始位置和长度在输入中给出。 问题:当我在 devC++ 中运行它时,一切都运行良好并且输出正常
这段代码有问题http://www.spoj.com/problems/BASE/它在 windows 和 linux 上运行良好,但是当我在 ideone 上运行它时,它没有显示任何输出。谁能告诉我
/* package whatever; // don't place package name! */ import java.util.*; import java.lang.*; import
我正在用 C 语言编写一个程序,用于查找两个排序数组的交集。当我在我的机器上使用 GCC 编译并运行该代码时,该代码工作正常,但在 ideone.com 上出现运行时错误。 这是Live link到下
我的程序有什么问题?它在我的 PC 上运行良好,但在 IDEone 中它提供了正确的输出,但显示运行时错误。请帮忙。 #include using namespace std; struct stud
好吧,我在 Ideone 上搞砸了并意外提交了这段代码,但令我惊讶的是它实际上编译并运行输出值 0,here . #include using namespace std; const int fi
我写了下面的代码: #include using namespace std; int main() { int v() return 0; } 我在 ideone 中运行了它,编译
我为我的家庭作业创建了一个程序,我尝试在 ideone.com 上测试它,但我得到一个错误: Exception in thread "main" java.lang.NullPointerExcep
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我最近试图在 ideone.com 中运行这段代码... #include #include using namespace std; int getVal(string name) {
请你告诉我我做错了什么。我认为我的代码工作正常,但未通过 Ideone 测试。 do{ linia = reading.nextLine(); try{ number
考虑下面的程序: #pragma startup foo1 #pragma exit foo2 void foo1() { printf("Called before main\n"); }
import java.util.Scanner; public class Admit { // the main method has minimal dialogue and just
我正在使用 ideone 作为在线 c++ 编译器。当我保存一个代码时,ideone 给出了一个随机名称,例如 lnzr40 稍后可能会造成混淆(当我想打开特定代码时)。我想在编写/保存代码时更改该名
我正在尝试远程指导我办公室的几个人使用 Python,最简单的方法似乎是向他们展示这些简单的 Python 示例如何...... http://wiki.python.org/moin/SimpleP
我正在尝试通过比较 Visual Studio 的输出与 GCC 的输出来调试我在 Visual Studio 中遇到的问题,但我似乎无法获得要在 Ideone 中编译的极其简化的代码版本: #inc
我想建立自己的在线编译器。我想为此使用 Ideone Api。但其 api 以 WSDL 格式提供。我非常努力地尝试,但可以找到任何关于如何从 WSDL 中提取数据的教程。请告诉一些使用 Ideone
已结束。此问题正在寻求书籍、工具、软件库等的推荐。它不满足Stack Overflow guidelines 。目前不接受答案。 我们不允许提出寻求书籍、工具、软件库等推荐的问题。您可以编辑问题,以便
我正在尝试编写一个程序,该程序接受语法不正确的文本(长度低于 990 个字符)作为输入,对其进行更正,然后返回更正后的文本作为输出。我尝试使用在线编译器“ideone”运行该程序,但它返回了很多我不太
以下代码计算输入整数的阶乘。我在 Codeblocks 中运行了 2 个测试用例 - 9 和 2,并得到了正确的输出。对于相同的输入,ideone 将 2 的阶乘输出为 6,但它正确输出 9 的阶乘。
我是一名优秀的程序员,十分优秀!