質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

Q&A

解決済

4回答

2990閲覧

正常終了と異常終了の違いについて

torimingo

総合スコア122

C

C言語は、1972年にAT&Tベル研究所の、デニス・リッチーが主体となって作成したプログラミング言語です。 B言語の後継言語として開発されたことからC言語と命名。そのため、表記法などはB言語やALGOLに近いとされています。 Cの拡張版であるC++言語とともに、現在世界中でもっとも普及されているプログラミング言語です。

0グッド

0クリップ

投稿2019/03/22 08:22

正常終了と異常終了の違いがわかりません。
たとえば、ファイルをopen()して、開けなかった場合は、異常終了exit(EXIT_FAILURE)で終わらせるべきですか?
なんとなく、正常に終了させてもいいような気もします。

以下にコードを示します。

c

1 int main() 2 { 3 int fd; 4 5 fd = open("test.txt", O_RDONLY); 6 7 if(fd < 0){ 8 printf("Error : can't open file\n"); 9 // 異常終了で終わらせていいのでしょうか? 10 exit(EXIT_FAILURE); 11 } 12以下略

EXIT_FAILUREと、EXIT_SUCCESSは、どのように使い分けるべきでしょうか?
また、正常終了と異常終了で、プロセス?の後処理に違いはありますか?

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答4

0

ベストアンサー

そのプログラムを実行して終了したときに、exit()の引数は参照できますので、その値によって、処理を変えたりします。

Linuxの場合:

sh

1# 正常終了か異常終了かで処理を変える 2if ./myprogram 3then echo 正常終了しました 4else echo 異常終了しました; exit 1 5fi

sh

1# exitの数値を直接参照する 2./myprogram 3echo プログラムはステータス $? で終了しました

sh

1# 正常終了の場合だけ、後続処理を実行 2./myprogram && ./nextprogram

Windowsバッチの場合:

CMD

1rem 正常終了か異常終了かで処理を変える 2myprogram.exe 3if errorlevel 1 ( 4 echo 異常終了しました 5 exit /b 1 6) else ( 7 echo 正常終了しました 8)

サンプルでは、echoを書いてますが、ここにいろいろ処理を書くわけです。


ステータスコードの例:
Unix/Linuxのgrepでは、検索した文字列が見つかった場合exit(0)して、最後まで検索したが見つからなかった場合exit(1)して、ファイルが見つからないなど何らかのエラーで検索が実行できなかった場合exit(2)します。

投稿2019/03/22 08:33

編集2019/03/22 08:42
otn

総合スコア84505

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torimingo

2019/03/22 08:38

ご回答をありがとうございました。 exit()の使い方がわかりました。 以後、回答して頂いた内容を気にしながらコーディングすることに致します。
guest

0

プロセスもプログラムも自分で設計するものです。
従って、一連のプロセスの設計上で問題がないのであればどちらでも良いといえます。

ただし、ご存知の通り一般的には異常時は「EXIT_FAILURE」等(というよりは0以外)を返すものという共通認識があるので、例えば公開APIとかにする時は従ったほうが良いでしょう。

投稿2019/03/22 08:31

S_kawa

総合スコア156

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torimingo

2019/03/22 08:42

ご回答ありがとうございました。 仕様として問題なければ、正常終了でもいいんですね。
guest

0

なんとなく、正常に終了させてもいいような気もします。

仕様として問題なければ、なんとなくでなく普通に正常終了でも良いです。

よくあるのが、一連のプログラム群を連続で実行したい時なんかに、後続の処理を中断したい場合に異常終了を返します。

ファイルをopen()して、開けなかった場合は、なんらかの処理ができないはずですが、
そのために、後続のプログラムが困らなければ正常終了でも良いです。

投稿2019/03/22 08:30

momon-ga

総合スコア4820

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torimingo

2019/03/22 08:41

ご回答ありがとうございました。 仕様として問題なければ、正常終了でもいいんですね。
guest

0

なんとなく、正常に終了させてもいいような気もします。

「ファイルがないのも当然ありうる状況で、そのときは何もしなくていい」という状況なら、正常終了してもいいかもしれません。

投稿2019/03/22 08:30

maisumakun

総合スコア145183

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

torimingo

2019/03/22 08:41

ご回答ありがとうございました。 仕様として問題なければ、正常終了でもいいんですね。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問