5

Undefined Behaviour次のプログラムはCで呼び出しますか?

int main()
{
    printf("Printf asking: Where is my declaration ?");
}

上記のプログラムには暗黙の宣言がありprintf()ますが、上記のコードは完全に標準に準拠していますか、それとも実装固有の動作がありますか?

4

1 に答える 1

7

はい、そうです。スコープ内に宣言がないのはUBです。

J.2未定義動作

—関数が関数プロトタイプで定義されているスコープ内の関数プロトタイプなしで関数を呼び出す場合、プロトタイプが省略記号で終了するか、昇格後の引数のタイプがパラメーターのタイプと互換性がありません(6.5.2.2 )。

また、C99ではメインからの脱落は問題ないことに注意してください(つまり、意味的にはと同等return 0;です)。C99より前のコンパイラの場合、main関数のreturn型が。と互換性のある型であるintreturnステートメントが必要です。

于 2010-08-20T04:21:09.603 に答える