exit()について

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Jimmy

exit()について

#1

投稿記事 by Jimmy » 13年前

昨日はお世話になりました。C言語始めたばかりの初心者です。

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

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

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

たかぎ
記事: 328
登録日時: 14年前
住所: 大阪
連絡を取る:

Re: exit()について

#2

投稿記事 by たかぎ » 13年前

環境不明なので正確なことはいえませんが...

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

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: exit()について

#3

投稿記事 by softya(ソフト屋) » 13年前

exit関数はOSに終了コード1で終わること伝えてアプリを終了します。
ここでは戻り値というものは出て来ません。

この終了コードは、コマンドプロンプトのバッチファイルなどで利用できます。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

Jimmy

Re: exit()について

#4

投稿記事 by Jimmy » 13年前

たかぎさん、softyaさんありがとうございます。大体わかりました。

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

アバター
みけCAT
記事: 6734
登録日時: 14年前
住所: 千葉県
連絡を取る:

Re: exit()について

#5

投稿記事 by みけCAT » 13年前

return 0;は、その関数の戻り値として0を返します。
exit(0);は、プログラムを終了コード0で終了します。
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 14年前
住所: 東海地方
連絡を取る:

Re: exit()について

#6

投稿記事 by softya(ソフト屋) » 13年前

Jimmy さんが書きました:たかぎさん、softyaさんありがとうございます。大体わかりました。

return 0; と exit(0); はどのような違いがあるのでしょうか?
main関数からだとreturn 0;で終了すればexit(0);と同等ですが、幾つもの関数を呼び出した関数の先で続行せず終了したくなったらexit(0);するのがmainに戻る方法を考えなくてよいのでややこしくなくて良いですね。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

たかぎ
記事: 328
登録日時: 14年前
住所: 大阪
連絡を取る:

Re: exit()について

#7

投稿記事 by たかぎ » 13年前

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++であれば、また事情が変わってきます。

Jimmy

Re: exit()について

#8

投稿記事 by Jimmy » 13年前

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

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

Jimmy

Re: exit()について

#9

投稿記事 by Jimmy » 13年前

たかぎさんありがとうございます。
タイピングが遅すぎて遅れました(言い訳です・・・)。丁寧な返答ありがとうございます。違いが分かりました。ありがとうございます!

Jimmy

Re: exit()について

#10

投稿記事 by Jimmy » 13年前

たかぎさんありがとうございます。
タイピングが遅すぎて遅れました(言い訳です・・・)。丁寧な返答ありがとうございます。違いが分かりました。ありがとうございます!

閉鎖

“C言語何でも質問掲示板” へ戻る