- ベストアンサー
fopenのコード
初歩的なことですがファイルをオープンするfopenの例題で *************************** #include<stdio.h> int main (void) { FILE *fp; fp = fopen ("test1.txt","w"); if (fp==NULL) { printf ("ファイルをオープンできませんでした。\n"); return 1; } else { printf ("ファイルをオープンしました。\n"); } fclose (fp); printf ("ファイルをクローズしました。\n"); return 0; } *********************************というのがあります。 この中のif文の中のreturnの戻り値が1なのはなぜでしょうか? (例題によっては-1というのもありましたが・・。) またどこに戻り値を返すのでしょうか? もしファイルがオープンできなければその時点で終了になるのでしょうか?初歩的なところですがお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>この中のif文の中のreturnの戻り値が1なのはなぜでしょうか? >(例題によっては-1というのもありましたが・・。) 正常終了(0)と区別したい、というくらいの意味で、0以外ならば いくつでもよいです。 >またどこに戻り値を返すのでしょうか? そのプログラムを実行したOS側です。 Windowsでバッチファイルの中で実行したのであれば、0とか-1とかいう戻り値によって バッチファイルのその後の動きをコントロールできます。 また、UNIX系のOSでシェルスクリプトの中で実行したのであれば、 戻り値の値によってシェルスクリプトのその後の動きをコントロールできます。 >もしファイルがオープンできなければその時点で終了になるのでしょうか? 今回の場合は、そのとおりです。 ファイルをオープンできなかった場合、main関数を(戻り値1、前述のとおり0と区別できればよい)で終了しているためです。
その他の回答 (3)
- chie65536(@chie65535)
- ベストアンサー率44% (8757/19871)
mainからの戻り値は、バッチファイルで使えます。 質問文のプログラムを「userprog.exe」と言う名前で作成しておいてから、テキストファイルに --------- @echo off userprog.exe if ERRORLEVEL 3 goto RET3 if ERRORLEVEL 2 goto RET2 if ERRORLEVEL 1 goto RET1 echo userprogのmainが0でreturnしました。 goto END RET1: echo userprogのmainが1でreturnしました。 goto END RET2: echo userprogのmainが2でreturnしました。 goto END RET3: echo userprogのmainが3でreturnしました。 END: --------- と書いてtest.batと言う名前で「userprog.exeがある場所と同じ場所に、バッチファイルとして保存」するとWindowsのコマンドプロンプトで実行できるようになります。 コマンドプロンプトで実行すると C:\TEST>test<enter> userprogのmainが0でreturnしました。 C:\TEST> とか C:\TEST>test<enter> userprogのmainが1でreturnしました。 C:\TEST> とかって感じになり「プログラムの実行結果によって、違う処理を続ける」ことが出来ます。
お礼
難しいですね。そういう方法もあるのですか。回答ありがとうございます。
- titokani
- ベストアンサー率19% (341/1726)
Windowsとかunix系OSだとmain関数の戻り値が、プロセスの戻り値になります。 普段あまり意識されることはありませんが、バッチファイルを作ったり、子プロセスとして起動されるような場合には、重要になることがあります。 プロセスの戻り値としては、0~255までしか有効でない場合が多いので、main関数の戻り値も、0~255までにする習慣にしといたほうが無難かと思います。 例えば、256なんて値を返そうとすると、0になってしまいますので、要注意ですね。
お礼
なるほど。main関数の戻り値はあまり気にしてないですね。回答ありがとうございます。
- php504
- ベストアンサー率42% (926/2160)
stdlib.hに #define EXIT_SUCCESS 0 #define EXIT_FAILURE 1 と定義されていたりするのでこれを使うこともあります return EXIT_FAILURE; return EXIT_SUCCESS;
お礼
そういうのもあるのですか。複雑ですね。回答ありがとうございます。
お礼
そういうことなんですね。回答ありがとうございます。