代码在 ideone 中编译,但不使用 gcc
Posted
技术标签:
【中文标题】代码在 ideone 中编译,但不使用 gcc【英文标题】:Code compiles in ideone but not with gcc 【发布时间】:2013-11-11 05:18:29 【问题描述】:我写了以下代码:
#include <iostream>
using namespace std;
int main()
int v()
return 0;
我在ideone中运行,编译成功。我的计算机上的文件test1.cpp
中有相同的代码,我运行g++ test1.cpp
并收到以下错误:
./test1.cpp: In function ‘int main()’:
./test1.cpp:7:2: error: a function-definition is not allowed here before ‘return’
为什么会发生这种情况?这是一个错误吗? 我正在使用 linux mint,gcc 版本 4.7。
【问题讨论】:
现在在您的实际代码中添加相同的分号并重新编译 你是怎么编译这个的?你的实际编译命令是什么? *打脸。好的,试试 g++-4.8 test1.cpp @BryanChen 我不认为它是一种类型,请参阅here 生成相同的错误消息,如果没有分号,如果你分叉并删除它,ideoone 也会产生相同的错误。 @BryanChen 我正在回滚 b/c 没有办法在缺少;
的情况下生成错误消息。
【参考方案1】:
这里少了一个分号:
int v()
^
应该是:
int v() ;
这是一个函数声明,但不清楚这是什么意思。如果你想初始化v
,那么下面的方法会起作用:
int v(0) ;
或在C++11中:
int v0 ;
【讨论】:
这里只是一个错字;他的链接代码包括分号。 @ErnestFriedman-Hill 请参阅here 生成与描述相同的错误消息,但如果添加;
,则错误消息会消失。所以它看起来根本不像一个错字。
@ErnestFriedman-Hill 他的链接代码无关紧要,它是编译器。这是正确的答案。【参考方案2】:
这通常被称为 C++ 中最令人头疼的解析。当你做类似的事情时
int f();
编译器将其读取为函数原型,声明一个函数f
,它返回一个int
。如果您使用的是 C++11,则应改为使用
int f; // f initialized to 0
如果您不使用 C++11,请确保立即初始化变量。
【讨论】:
这不会导致编译失败。在main()
中声明一个函数是完全可以的。【参考方案3】:
你忘记了后面的分号
int v();
【讨论】:
【参考方案4】:在您使用 4.7 时,Ideone 正在为您的代码使用 gcc 4.8.1(您可以在自己的链接中看到)
关于 C++ 11 实现有 several difference,显然它受到看起来像函数声明的行的影响。
【讨论】:
以上是关于代码在 ideone 中编译,但不使用 gcc的主要内容,如果未能解决你的问题,请参考以下文章
我下载的codeblocks也提示找不到可执行的编译器,我后来自己下了一个gcc,但不知道如何设置。