-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: エラー: ';' の前にコンストラクタ、デストラクタ、または型変換が必要です トークン

なぜこのエラーが発生するのですか?

4

1 に答える 1

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

于 2013-02-04T09:53:55.467 に答える