10

次のように、mainから明示的に返されないCプログラムがいくつかあります。

int main(int argc, char *argv[])
{
  // blah blah
}

GCC4.6.3と次のオプションを使用してコンパイルした場合:

gcc file.c -Wall -Wextra

プログラムは0を返さず、問題を引き起こしますが、標準(およびSOに関する他の多くの回答)は次のように述べています。

main関数のreturn型がintと互換性のある型である場合、main関数への最初の呼び出しからの戻りは、main関数によって返された値を引数としてexit関数を呼び出すことと同じです。[10] }に到達します。 main関数を終了すると、値0が返されます。戻りタイプがintと互換性がない場合、ホスト環境に返される終了ステータスは指定されていません。

[10] 6.2.4に従って、メインで自動保存期間が宣言されているオブジェクトの存続期間は、後者では終了しない場合でも、前者の場合で終了します。

私のプログラムは異なる値、160、15、14 ...ガベージを返しますか?

私は何かが足りないのですか?これはGCCのバグですか?GCCオンラインドキュメントに何も見つかりません。GCCは、これを指定できない古いC標準(C99より前)をまだ参照していますか?

4

1 に答える 1

14

デフォルトでgcc-std=gnu89、C90+GNU拡張機能です。

そしてC90は言う:

(C90、5.1.2.2.3)「メイン関数が値を指定しない戻りを実行した場合、ホスト環境に返される終了ステータスは未定義です」

main関数でreturnが省略された場合の戻り値を持つ、-std=c99またはをコンパイルします。-std=gnu990

于 2012-10-17T14:23:17.860 に答える