• ベストアンサー

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

techaの回答

  • techa
  • ベストアンサー率60% (41/68)
回答No.1

C言語でのmain()も関数であり、戻り値を要しない場合にはvoid型での利用が可能です。 ただ、コマンドラインで利用する場合などでは int型で定義して return 0; return 1; などのようにすれば、標準出力としてその値が返されるので、結果に応じた処理が可能となるのです。 ここで0を返すか1を返すかは、ソフト作成者の思想に任されているので、あまり深く考える必要はないようにおもいます。 ちなみに私は、エラー終了したのでない限り1を返すように記述しています。 利用は真=1、偽=0というのが思想的にわかりやすいからです。(偽=0というのは一般的ですが、真≠0ともいえますから、必ずしも1とは限りませんが)

C_32767
質問者

お礼

ご回答ありがとうございました。 returnでどちらを返してもよいということですか。 なんだか難しいですね。

関連するQ&A

  • main関数の戻り値

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

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

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

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

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

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

    はじめまして。c初心者です。 main文の最後に書くreturnはreturn 0 の0を変えると、プログラムが終了した後、もう一度起動するみたいな話を聞いたことがあります。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キー及び半角では適度な空白スペースを作ることができなかったので、プログラムを見やすくするための空白スペースは全て全角スペースで作ってあります。(もしかしたら普通に表示させる方法があるのかもしれませんが、わかりませんでした。)

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

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

  • C言語で、自分で作った関数内で終了させるには

    C言語なのですが、自分でエラーチェックをする関数を作りました。 エラーを検出した時点でプログラムを終了させたいのですが、 どのようにすればいいのでしょうか? return 0; はmain関数を終了させるときに使うのはわかるのですが… 初歩的な質問かもしれませんが、よろしくお願いします。

  • C言語 main関数とsum関数の記述順について

    はじめまして。 【苦しんで覚えるC言語】(Web版)でC言語を学んでいる初学者です。 【第1部:C言語基礎編】>【関数の作り方】>【自作関数を作る】の部分(http://9cguide.appspot.com/11-01.html#S2)でつまづいています。 下記のような、1から100までの数字の合計を表示するプログラムが例題として取り上げられています。 しかし、ここが理解できないので、次の【プロトタイプ宣言】に進めずにいます。 例題1  sum関数をmain関数の後に記述した場合(プログラムが実行されない)。 #include <stdio.h> int main(void) { return 0; } int sum(void) { printf("%d\n",(1 + 100) * 100 / 2); return 0; } 例題2  sum関数をmain関数の先に記述した場合(プログラムが実行される)。 #include <stdio.h> int sum(void) { printf("%d\n",(1 + 100) * 100 / 2); return 0; } int main(void) { return 0; } 例題1の場合、【まずmain関数を作り、次にsum関数を作りました。この場合、main関数を解析している段階では、sum関数は発見されておらず、従って、main関数の中では、sum関数を使うことは出来なくなってしまいます。】との説明がありますが理解できません。 コンパイラがどのような順番でプログラムを処理しているか理解できていないので分からないのだと思います。 例題1の場合と例題2の場合の両方について、コンパイラがどのような順番でプログラムを処理しているのかを具体的に教えてください。 どうかよろしくお願い致します。

  • 関数をこえてプログラムを強制終了させる方法

    main関数以外の関数からmainのreturnに移動して終了するにはどうすればよろしいのでしょうか?。main関数以外の関数からgotoでreturnの前まで移動しようとしたら関数を飛び越えて移動できませんとエラーが起こりました。関数をこえて強制終了させる方法を知っている方お願いします。教えてください。

  • 初期化は、main関数の外で行うものなのか

     ルネサスHEWのサンプル・プログラムを見ると、I/Oの初期化、Bセクションのクリア、DセクションからRセクションへのコピーなどを行ってから、main関数に飛んでいます。  これらの初期化はメイン関数の中で行うべきだと思っているのですが、どうなんでしょう。  パソコンでexeファイルを実行した場合、mainに飛ぶと思っているのですが、初期化プログラムに飛んでからmainに飛ぶのでしょうか。  宜しくお願いします。