ページ 11

exit()について

Posted: 2012年7月29日(日) 11:18
by Jimmy
昨日はお世話になりました。C言語始めたばかりの初心者です。

ファイルを入出力するプログラムを学んでいます。そこではよく、下のように exit(1); が使われているのを目にします。
fp = fopen( test.txt, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません¥n", fname );
exit(1);
}

戻り値とかをあまり理解できてないのですが、  exit(1); の1をどこに返したのでしょう?返す値を0以外にしたということはエラーを知らせているのですよね。そのエラーをプログラマをどこで確認できるのでしょうか? exit(1); を使うメリットを教えてください。

根本的に解釈が違うのでしたらご指導ください。

Re: exit()について

Posted: 2012年7月29日(日) 11:24
by たかぎ
環境不明なので正確なことはいえませんが...

exit関数の引数はホスト環境に返されます。
通常は、そのプログラムを実行させたプログラム(典型的にはシェル)に何らかの方法で通知されます。

Re: exit()について

Posted: 2012年7月29日(日) 11:24
by softya(ソフト屋)
exit関数はOSに終了コード1で終わること伝えてアプリを終了します。
ここでは戻り値というものは出て来ません。

この終了コードは、コマンドプロンプトのバッチファイルなどで利用できます。

Re: exit()について

Posted: 2012年7月29日(日) 11:29
by Jimmy
たかぎさん、softyaさんありがとうございます。大体わかりました。

return 0; と exit(0); はどのような違いがあるのでしょうか?

Re: exit()について

Posted: 2012年7月29日(日) 11:30
by みけCAT
return 0;は、その関数の戻り値として0を返します。
exit(0);は、プログラムを終了コード0で終了します。

Re: exit()について

Posted: 2012年7月29日(日) 11:33
by softya(ソフト屋)
Jimmy さんが書きました:たかぎさん、softyaさんありがとうございます。大体わかりました。

return 0; と exit(0); はどのような違いがあるのでしょうか?
main関数からだとreturn 0;で終了すればexit(0);と同等ですが、幾つもの関数を呼び出した関数の先で続行せず終了したくなったらexit(0);するのがmainに戻る方法を考えなくてよいのでややこしくなくて良いですね。

Re: exit()について

Posted: 2012年7月29日(日) 11:36
by たかぎ
Jimmy さんが書きました:return 0; と exit(0); はどのような違いがあるのでしょうか?
おそらく、main関数内でのreturn 0;との違いを知りたいのだと思いますが...

main関数は再帰呼び出しが可能ですので、最初に呼び出されたmain関数の中でのreturn 0;は、最初に呼び出されたmain関数の中で呼び出したexit(0);と同じ意味です。
2回目以降に呼び出されたmain関数の中でのreturn 0; は、単に呼び出し元に0を返却値として返します。
最初に呼び出されたmain関数の中以外から呼び出したexit(0);は、そこでいきなりプログラムが終了します。

もしCではなくC++であれば、また事情が変わってきます。

Re: exit()について

Posted: 2012年7月29日(日) 11:38
by Jimmy
みけCATさんありがとうございます。「プログラムを終了コード」をキーワードに違いを調べてみたいと思います。
softyaさん二度目の質問にも返答ありがとうございます。関数を呼び出すときには、使い分けたいと思います。

ありがとうございました!

Re: exit()について

Posted: 2012年7月29日(日) 11:43
by Jimmy
たかぎさんありがとうございます。
タイピングが遅すぎて遅れました(言い訳です・・・)。丁寧な返答ありがとうございます。違いが分かりました。ありがとうございます!

Re: exit()について

Posted: 2012年7月29日(日) 11:45
by Jimmy
たかぎさんありがとうございます。
タイピングが遅すぎて遅れました(言い訳です・・・)。丁寧な返答ありがとうございます。違いが分かりました。ありがとうございます!