2

重複の可能性:
return 0 Implicit
なぜ return 0 はオプションなのですか?

exitorを使用しなくても C の main() 関数が正しく終了できるのはなぜreturnですか?

例えば:

#include<stdio.h>

int sum(int a,int b)
{
 return (a + b);
}

int main()
{
 int a=10;
 int b=5;
 int ans;    
 ans=sum(a,b);
 printf("sum is %d",ans);
}
4

5 に答える 5

13

これは、C99 および C11 標準で次のように規定されているためです。

5.1.2.2.3 プログラムの終了

}関数を終了する に到達するとmain、値 0 が返されます。戻り値の型が と互換性がない場合int、ホスト環境に返される終了ステータスは指定されていません。

ただし、return ステートメントを追加する必要があります。これは、C89 では戻り値が定義されていないためです。

3.6.6.4 return ステートメント

}関数を終了する に到達することは、式なしで return ステートメントを実行することと同じです。

2.1.2.2 ホスト環境

メイン関数が値を指定しないリターンを実行した場合、ホスト環境に返される終了ステータスは未定義です。

于 2012-11-05T13:15:01.877 に答える
11

コンパイラが暗黙的に追加するexitためです。

その理由についてナイトクラッカーをチェックしてください。それでも、意味のある戻りコードで明示的な終了/戻りを行うことを強くお勧めします。

C99 標準:

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

チェックする C89 テキストを探しています。

于 2012-11-05T13:08:53.400 に答える
0

どちらも実行せずに実行が終了した場合、成功したと見なされるため、つまり 0 が返されます。

于 2012-11-05T13:09:30.500 に答える
0

主に、フラグを使用しない場合、コンパイラは何も教えてくれません。

深刻なフラグを使用すると、コンパイラーは不足している詳細をすべて教えてくれます。

何かを返すことは重要です。開始したプログラムは、プログラムの実行が成功したかどうかを知ることができます。プログラムが何も返さない場合 (つまり、デフォルトでは 0)、たとえば、プログラムを開始した端末は、失敗したとしても完全に機能したと想定します。

于 2012-11-05T13:11:45.650 に答える
0

コンパイラがそれを追加するからです。

Unix/Linux では、次の小さなスクリプトを試すことができます。

retval.sh

#!/bin/sh
$1
echo $?

次に、プログラムを実行します。

./retval.sh yourprogram

プログラムの戻り値を出力します。return を追加しない場合や、exit() が整数値を返す場合でも、main() が表示されます。

于 2012-11-05T13:19:12.917 に答える