• ベストアンサー

main文のreturnは0以外は何ができるの?

はじめまして。c初心者です。 main文の最後に書くreturnはreturn 0 の0を変えると、プログラムが終了した後、もう一度起動するみたいな話を聞いたことがあります。returnについて教えていただけませんか?よろしくお願いします。

質問者が選んだベストアンサー

  • ベストアンサー
  • jacta
  • ベストアンサー率26% (845/3158)
回答No.5

#3です。 一点書き忘れました。初心者向きの話題ではないのですが... main関数を再帰的に呼び出した場合、最初のmainからreturnする場合を除いて、返却値をどう扱うかは自分で決めることになります。 たとえば、 int main(int argc, char *argv[]) {  if (argc > 0)  {   while (main(0, NULL) != 0);   return 0;  }  /* 何らかの処理 */ } のような書き方をすれば、mainが0以外を返すと再度呼び出されることになります。

その他の回答 (4)

回答No.4

return文が実行されると、呼び出し元にその値を渡します。 main()の呼び出し元は、一般にはOSになるのでOSがその値を受け取ります。 普通は、0が返って来れば正常終了、それ以外の値であれば異常終了と判断されます。 ※※ 例 ※※ 1. ファイルメインテナmakeを使用した場合。 (1) makeから子プロセスとしてgcc等が呼び出される。 (2) gccがソースファイルのコンパイルでエラーを見つけたらそのレベルによって1以上の値を返す。 (3) makeは、gccの返却値が0でないのでコンパイルに失敗したことを知ることが出来る。 2. shellスクリプトを使用する。 (1) shellスクリプト内でcpを使用したとする。 (2) cpで指定したファイルが無かったら、cpはエラーを返す。 (3) その値をshellスクリプトで判断し、エラー処理を行なう。 > return 0 の0を変えると、プログラムが終了した後、もう一度起動する それは、値を返された側がどうするかによって決まります。 普通は、終了したらそのままです。

kitakazetotaiyou
質問者

お礼

詳しい説明ありがとうございました。 >>終了したらそのままです。 その通りですね。

  • jacta
  • ベストアンサー率26% (845/3158)
回答No.3

> main文の最後に書くreturnはreturn 0 の0を変えると、プログラムが終了した後、もう一度起動するみたいな話を聞いたことがあります。 おそらくガセ情報です。もっとも、終了処理として具体的に何を行うかは処理系定義なので、再起動しても悪くはありませんが... mainからの返却値は、プログラムがどんな状態で終了したかを意味します。それが具体的にどのように解釈されるかは処理系定義ですが、0は必ず成功を意味します。また、<stdlib.h>で定義されるEXIT_FAILUREを返せば失敗を意味します。これらの場合も、成功した場合や失敗した場合にどう振舞うかは、やはり処理系定義です。 ちなみに、mainは「文」ではなく「関数」です。

kitakazetotaiyou
質問者

お礼

ありがとうございます。 ガセ情報ということが分かっただけでもよかったです。 また、詳しい説明もありがとうございました。 mainは文でなく関数ですね、当たり前ですねw

  • phoenix343
  • ベストアンサー率15% (296/1946)
回答No.2

はあ?別にmainから返すreternの値に意味はありませんよ。呼び出したプロセスがその返ってきた値をみて制御することはあるけど… どこから聞いたのでしょうか?

  • t_nojiri
  • ベストアンサー率28% (595/2071)
回答No.1

main()ということで書くと、普通そのプログラム(実行形式)を起動したOSのカーネルなり、バッチファイル等に返却値は返ります。 return値を変えると >プログラムが終了した後、もう一度起動するみたいな話を聞いたことがあります。 とすることもバッチやシェル内なら可能でしょうけど、カーネルの標準機能にその様な事は無いでしょう。