代码在ideone中编译,但不在gcc中编译

时间:2013-11-11 05:18:30

标签: c++ syntax-error

我写了以下代码:

#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版。

4 个答案:

答案 0 :(得分:2)

这通常被称为C ++最令人烦恼的解析。当你做

之类的事情
int f();

编译器将其读作函数原型,声明返回f的函数int。如果您使用的是C ++ 11,则应该执行

int f{}; // f initialized to 0

如果您不使用C ++ 11,请确保立即初始化变量。

答案 1 :(得分:2)

你在这里错过了一个分号:

 int v()
        ^

应该是:

 int v() ;

这是一个函数声明,但不清楚它是什么意思。如果您想初始化v,那么以下内容将起作用:

 int v(0) ;

C ++ 11

 int v{0} ; 

答案 2 :(得分:1)

你忘了分号后

int v();

答案 3 :(得分:0)

当您使用4.7时,Ideone正在使用gcc 4.8.1(您可以在自己的链接中看到)

有关于C ++ 11实现的several difference,显然它受到看起来像函数说明的行的影响。

相关问题