2013-02-01 225 views
-5
.... 
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: error: expected constructor, destructor, or type conversion before ‘;’ token

爲什麼我得到這個錯誤?

+1

你總是可以做到這一點。 –

+0

即使它有效,它的含義也不清楚。 – hvd

+0

你能澄清你的問題嗎?函數調用不應該「大括號」。 – juanchopanza

回答

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

相關問題