函数调用被解释为声明

时间:2017-11-14 21:15:48

标签: c++ declaration

下面的函数调用会生成编译器错误:

void myfun() {}

myfun(); // error:
         // gcc -- error: expected constructor, destructor, or type conversion before ';' token
         // clang -- error: C++ requires a type specifier for all declarations

int main()
{
  // ...
}

有人可以解释一下吗?函数调用如何与声明混淆?如果在main()内移动函数调用,为什么错误会消失?

1 个答案:

答案 0 :(得分:2)

除非将它们用于变量初始化,否则不能在函数外执行函数调用。所以你应该写......

void myfun() {}

int main()
{
  myfun();
}

int myfun() { return 1; }

int dummy = myfun(); 

int main()    {
}