为什么函数只能在其他函数中调用?

时间:2013-02-01 07:49:07

标签: c++ c

....
void foo()
{}
...
foo(); //why we can not call the function here?

int main(int argc, char** argv)
{}

我知道你不能这样做,它会导致编译错误。我想这可能与某些编译器理论有关,但任何人都可以告诉我这个的本质,还是只是一个随意的规则?

当我尝试编译以下代码时:

#include<iostream>
using namespace std;   

void foo()
{
    cout<<"test"<<endl;
}   

foo();    

int main() {}

我收到此错误消息。

  

test.cpp:10:6:错误:在';'标记之前预期的构造函数,析构函数或类型转换

为什么我会收到此错误?

1 个答案:

答案 0 :(得分:0)

你的假设是错误的。

#include <iostream>
int foo() {
  std::cout << "outside main" << std::endl;
  return 0;
}
int Global = foo();

int main() {
  std::cout << "intside main" << std::endl;
  return 0;
}

现在正式规则:函数调用是一个表达式。表达式可能出现在语句中,语句在函数中可能只显示 。但是表达式也可能出现在其他上下文中,例如全局对象的初始化 - int Global