昨日はお世話になりました。C言語始めたばかりの初心者です。
ファイルを入出力するプログラムを学んでいます。そこではよく、下のように exit(1); が使われているのを目にします。
fp = fopen( test.txt, "r" );
if( fp == NULL ){
printf( "%sファイルが開けません¥n", fname );
exit(1);
}
戻り値とかをあまり理解できてないのですが、 exit(1); の1をどこに返したのでしょう?返す値を0以外にしたということはエラーを知らせているのですよね。そのエラーをプログラマをどこで確認できるのでしょうか? exit(1); を使うメリットを教えてください。
根本的に解釈が違うのでしたらご指導ください。
exit()について
Re: exit()について
環境不明なので正確なことはいえませんが...
exit関数の引数はホスト環境に返されます。
通常は、そのプログラムを実行させたプログラム(典型的にはシェル)に何らかの方法で通知されます。
exit関数の引数はホスト環境に返されます。
通常は、そのプログラムを実行させたプログラム(典型的にはシェル)に何らかの方法で通知されます。
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: exit()について
exit関数はOSに終了コード1で終わること伝えてアプリを終了します。
ここでは戻り値というものは出て来ません。
この終了コードは、コマンドプロンプトのバッチファイルなどで利用できます。
ここでは戻り値というものは出て来ません。
この終了コードは、コマンドプロンプトのバッチファイルなどで利用できます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: exit()について
たかぎさん、softyaさんありがとうございます。大体わかりました。
return 0; と exit(0); はどのような違いがあるのでしょうか?
return 0; と exit(0); はどのような違いがあるのでしょうか?
Re: exit()について
return 0;は、その関数の戻り値として0を返します。
exit(0);は、プログラムを終了コード0で終了します。
exit(0);は、プログラムを終了コード0で終了します。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)
- softya(ソフト屋)
- 副管理人
- 記事: 11677
- 登録日時: 14年前
- 住所: 東海地方
- 連絡を取る:
Re: exit()について
main関数からだとreturn 0;で終了すればexit(0);と同等ですが、幾つもの関数を呼び出した関数の先で続行せず終了したくなったらexit(0);するのがmainに戻る方法を考えなくてよいのでややこしくなくて良いですね。Jimmy さんが書きました:たかぎさん、softyaさんありがとうございます。大体わかりました。
return 0; と exit(0); はどのような違いがあるのでしょうか?
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。
Re: exit()について
おそらく、main関数内でのreturn 0;との違いを知りたいのだと思いますが...Jimmy さんが書きました:return 0; と exit(0); はどのような違いがあるのでしょうか?
main関数は再帰呼び出しが可能ですので、最初に呼び出されたmain関数の中でのreturn 0;は、最初に呼び出されたmain関数の中で呼び出したexit(0);と同じ意味です。
2回目以降に呼び出されたmain関数の中でのreturn 0; は、単に呼び出し元に0を返却値として返します。
最初に呼び出されたmain関数の中以外から呼び出したexit(0);は、そこでいきなりプログラムが終了します。
もしCではなくC++であれば、また事情が変わってきます。
Re: exit()について
みけCATさんありがとうございます。「プログラムを終了コード」をキーワードに違いを調べてみたいと思います。
softyaさん二度目の質問にも返答ありがとうございます。関数を呼び出すときには、使い分けたいと思います。
ありがとうございました!
softyaさん二度目の質問にも返答ありがとうございます。関数を呼び出すときには、使い分けたいと思います。
ありがとうございました!
Re: exit()について
たかぎさんありがとうございます。
タイピングが遅すぎて遅れました(言い訳です・・・)。丁寧な返答ありがとうございます。違いが分かりました。ありがとうございます!
タイピングが遅すぎて遅れました(言い訳です・・・)。丁寧な返答ありがとうございます。違いが分かりました。ありがとうございます!
Re: exit()について
たかぎさんありがとうございます。
タイピングが遅すぎて遅れました(言い訳です・・・)。丁寧な返答ありがとうございます。違いが分かりました。ありがとうございます!
タイピングが遅すぎて遅れました(言い訳です・・・)。丁寧な返答ありがとうございます。違いが分かりました。ありがとうございます!