0
struct ack {
    char a, b, c;
};

main()
{
   struct ack bad;

   foo(bad);
}

foo(c)
   struct ack c;
{

}

これは gcc でのテスト ケースです。gcc4.8を使ってコンパイルしようとすると、問題なくコンパイルされます。ただし、 mainの前に関数を宣言する必要があることを学びました。なぜこれがコンパイルされるのですか?

4

2 に答える 2

0

現在、一般に、コンパイラが in への呼び出しを検出foo(bad)main()、foo が定義されていない場合、コンパイラはそれが存在すると想定し、 を返しintます。

foo()これは、ソース ファイルのどこかに が定義されていない場合に不平を言うリンカに問題をパントします。

于 2013-08-05T22:51:13.050 に答える