• ベストアンサー

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値を変えると >プログラムが終了した後、もう一度起動するみたいな話を聞いたことがあります。 とすることもバッチやシェル内なら可能でしょうけど、カーネルの標準機能にその様な事は無いでしょう。

関連するQ&A

  • C言語でmain関数でのreturnとexit

    C言語でmain関数でのreturnとexitは同等とされてますが、 それは『プログラムを呼び出した元の動作』も同じですか? 例えばshellやOSから見て、割り当てメモリ開放などの点で returnで終了したプログラムの後処理と exitで終了したプログラムの後処理は 全く同じになりますか?

  • main関数の戻り値について

    c言語において、main関数の戻り値は何を意味しているのですか。 また、void型にすれば、main関数の戻り値を書かなくても問題無いでしょうか。 また、関数はreturn文を書かなくても、最後まで処理を実行すると終了するらしいですが、void型にすれば、main関数でreturn文を書かなくても問題無いでしょうか。

  • returnの使い方

    c言語初心者です。 returnを使って違う関数からはじめのmainのプログラムに戻したいのですが、引数の使い方がいまいちよくわかりません。 どなたか良い方法を教えてください。 よろしくおねがいします。

  • main関数終了時のreturnの意味は?

    質問の題名通り、main関数終了時のreturnの意味が知りたいです。いつもは参考書に書いてある通り、return 0とやっていたのですが、参考書のサンプルプログラムでreturn 1というのがでてきた為、少し混乱しました。 参考書に説明が載っていないのでmain関数内でのreturnの意味をご教授願いたいです。よろしくお願いいたします。

  • プログラムがmain関数から始まらない??

    C言語初心者です。よろしくお願いします。 return文について勉強している途中だったのですが、次のプログラムを実行してみたところ、わからないことが出てきたので質問させていただきました。(ほとんど自分で作ったプログラムではないです) #include <stdio.h> /* 関数a()はintを返すと指定 */ int a() {     if (1) {          /* ここで関数a()は終わります */          printf("yes1\n");          return 300;     }     pritnf("yes2\n");     /* ここは通りません */     printf("this is a()\n");     return 10; } int main() {     int i;     /* 関数a()の返り値を変数iに代入します */     i = a();     printf("i = %d\n", i);     return 0; } このプログラムの出力結果は yes1 i = 300 となるのですが、 1.以前「main関数からプログラムは開始する」というようなことを学習したのですが、このプログラムではyes1が出力されていることからa関数からプログラムが始まっていませんか? 2.a関数のif文の中のreturn 300;でプログラムが終了しないのはなぜですか? 知識のある方、どうか教えてください。 よろしくお願いします。 ※ このプログラムを表示させる際、Tabキー及び半角では適度な空白スペースを作ることができなかったので、プログラムを見やすくするための空白スペースは全て全角スペースで作ってあります。(もしかしたら普通に表示させる方法があるのかもしれませんが、わかりませんでした。)

  • return 0; return 1; まで同じ

    #include <stdio.h> int main() { printf("%d %c\n", 65, 65); return 0; }  コンパイル後は 65 A  return 1;も同じでした。 しかし  return 2;すると  Exited: ExitFailure 2  終了しました:出口の失敗2 となります。  2以上でしたら、出口が塞がるのでろうぐらいしかわかりません!?    どんなバクなのでしょうか!?  よろしくお願いします。

  • return文について

    C言語を独学で勉強中です。 最初から分からないのがあったので、質問させていただきます。 #include <stdio.h> main() { printf("Hello World!!\n"); return(0); } return(0)を記入しなくてもエラーはでないのに、 なぜ必要なんですか? 参考書には何も書いてないので分かりません。 よろしくお願いします。

  • main()とint main(void)の違い

    最初main()と習ったのですが、最近学校でmain()ではなくint main(void)を使うように なりました。 どのように違うのでしょうか? main関数のところに引数が入っている意味がわかりません。 (void)ってなんですか? そもそも引数って何ですか? あと、プログラムの最後にreturn(0)って書いてあるんですが、これはどういう意味ですか? 回答よろしくお願いします。

  • main関数の戻り値

    C言語のmain関数の戻り値はint型ですよね。 私もそういう決まりだと思って守ってきました。 しかし、「mainが戻り値を返すって、どこに返すの?」ということが、私は理解できていません。 私が調べたところでは、「ホスト実行環境」という言葉がこの問題に関係あるようですが、この言葉の意味はよくわからないですし、似た言葉で「ホスト環境」ということばがあるのですが意味も関係もわかりません。 これらは、OSとは違うと思うんですが、自信はありません。 それでも、ない知識を振り絞っていろいろ考えてみると、次のようなことらしいのですが、正しいでしょうか。 ・OSはプログラムの実行に先立ちホスト実行環境を作る。 ・静的記憶域のオブジェクトを初期化するのはホスト実行環境である。 ・関数が、main関数を呼ぶことは可能である。(以下では、main関数が関数から呼ばれる場合は除く。) ・main関数を呼ぶのは、ホスト実行環境が行なう。 ・main関数の中のreturnによってプログラムが終了するのと、exit関数でプログラムが終了することに違いはない。 ・main関数の戻り値は、ホスト実行環境に返される。 ・returnによってホスト実行環境に返される値は、int型である限りなんでもよい。 ・exitによってホスト実行環境に返される値は、int型である限りなんでもよい。 ・必ずexitで値が返されるならば、main関数の中にreturnはなくてもよい。 main関数からの戻り値をどうしようと構わないんだと思うんですが、皆さんの経験の中で、実例としてこういうふうに使われる、というのは何かないのでしょうか。 (ホスト実行環境に値が返される、といっても無視するのでは意味はないと思うのです。 その値の使用例としては、 0が返ってくると「プログラムは正常終了しました。」と表示するとか、0以外の値が返されると別のプログラムが走るとか、 そういうことだと思うんですが。)

  • main.cpp以外のcppの追加について

    VisualC++を使用し、プログラムを作っています。 そこでプログラムを整理しようと思うのですが、 main.cpp以外もcppを作成し、プログラムを分割することが可能ですよね? cppファイル自体は作ることができるのですが、 作った後どのようにしてmain文から呼び出し?をするのか具体的なことがわかりません。 どのようなワードで検索が引っ掛かるのかもわからないので 掲載しているHP、もしくはやり方を教えてください。 私自身理解が足りていないので、 説明もあやふやなものになっていますがよろしくお願いします。

専門家に質問してみよう