Undefined Behaviour
次のプログラムはCで呼び出しますか?
int main()
{
printf("Printf asking: Where is my declaration ?");
}
上記のプログラムには暗黙の宣言がありprintf()
ますが、上記のコードは完全に標準に準拠していますか、それとも実装固有の動作がありますか?
Undefined Behaviour
次のプログラムはCで呼び出しますか?
int main()
{
printf("Printf asking: Where is my declaration ?");
}
上記のプログラムには暗黙の宣言がありprintf()
ますが、上記のコードは完全に標準に準拠していますか、それとも実装固有の動作がありますか?
はい、そうです。スコープ内に宣言がないのはUBです。
J.2未定義動作
—関数が関数プロトタイプで定義されているスコープ内の関数プロトタイプなしで関数を呼び出す場合、プロトタイプが省略記号で終了するか、昇格後の引数のタイプがパラメーターのタイプと互換性がありません(6.5.2.2 )。
また、C99ではメインからの脱落は問題ないことに注意してください(つまり、意味的にはと同等return 0;
です)。C99より前のコンパイラの場合、main関数のreturn型が。と互換性のある型であるint
returnステートメントが必要です。