
No.3ベストアンサー
- 回答日時:
慣用的に、
正常終了ならexit(0);
異常終了ならexit(1);
としています。
exit(x);とreturn x;
は、同じ意味となります。
(C言語の規格で、main()からreturnする終了は、
exitの終了と同等となっている)
正常終了ならexit(0);もしくはreturn 0;は意見が分かれないと思います。
問題は、異常終了の時1とするか-1とするかですが、
これはどっちでもいいです。
気になるなら、stdlib.hで定義されているEXIT_FAILUREマクロを使って、
exit(EXIT_FAILURE);
とすればいいでしょう。
エラーの種類によって値を変えてもいいし。
ところで、exit(0);とexit(1);の違いですが、
Windowsの場合、実はあまり意味がありません。
この値は、バッチファイルの中でエラーレベルとして
取得されます(詳細は略)。
昔のプログラムの中には、
エラーレベルの値によってバッチファイルに情報を伝えるというものがありました。
しかし現在はバッチファイルの使用は少なくなってきており、
終了時に0を指定使用が1を指定しようが、
その値を利用されることがほとんどありません。
ただ、なんとなく、正常終了ならエラーレベル0、以上ならそれ以外、としています。
UNIXやLinuxで、コンソールで動くツールならば、
利用される場面はあります。
(「終了ステータス」として、シェル(.shや.csh)の中で使えます)
詳しいご解答をありがとうございます!
今までは-1を使うものだと思っていましたが、
今回いろいろ教えていただいて、私の根本的な考え方の間違いがあったことがわかりました。
正しく理解できて嬉しく思っています!
本当にありがとうございました!またいろいろ調べてみます。
No.2
- 回答日時:
> return 0 は正常終了。
return -1は異常終了と覚えているのですが「main()のreturn」と「exit()」の話って理解で話を続けます。
一般的にプログラムの終了は
1.正常の終わった
2.正常ではないが終わった
3.死んだ/殺された
の3種です。
3はOS(または、OSに近いシステムソフトウェア)が直接関与するのでちょっと違う次元の話。
問題は1と2の違いをOS(または、OSに近いシステムソフトウェア)に伝える方法です。
普通「正常」という状態は一種類しかありません(すべてがオッケー)。
しかし、「正常でない」という状態は無数にあります。
よって、「正常=0、0でない時は何らかの異常」という使い方になります。
> return -1
終了ステータスに負の値を設定したときに、OS(または、OSに近いシステムソフトウェア)が符号をちゃんと認識するかどうか?
処理系依存なので、OSの指定がない限り正の整数を使ったほうが安全だと思います。
詳しいご解答ありがとうございます!
returnの返す値は自分で指定できるんですね^^;
認識なども全然知らなかったので、とても勉強になりました!
本当にありがとうございました!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
C言語で、メモリを解放しないで終わるプログラム
C言語・C++・C#
-
C言語 配列の長さの上限
C言語・C++・C#
-
関数から配列を返すには?
C言語・C++・C#
-
-
4
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
5
C言語の配列をPush(追加)するには
C言語・C++・C#
-
6
C言語での引数の省略方法
C言語・C++・C#
-
7
複数の変数を宣言する時、同時に初期化?できないでしょうか?
Java
-
8
C言語初心者の質問失礼します。
C言語・C++・C#
-
9
0除算して、落ちるプログラムと落ちないプログラム
C言語・C++・C#
-
10
フローチャートで。
C言語・C++・C#
-
11
acceptをalarmでタイムアウトさせる処理がうまくいきません
C言語・C++・C#
-
12
#include <Windows.h>というヘッダファイルについて
C言語・C++・C#
-
13
ファイル名を変数で書きこむfwriteの仕方
C言語・C++・C#
-
14
C 開放してるのにエラー(double free or corruption (!prev))がでる
C言語・C++・C#
-
15
DWORDの実際の型は何でしょうか
C言語・C++・C#
-
16
<math.h>があるのにsqrtが・・・
C言語・C++・C#
-
17
1 つ以上の複数回定義されているシンボルが見つかりました
C言語・C++・C#
-
18
改行を読み飛ばす
C言語・C++・C#
-
19
strstrを利用しない文字列検索について
C言語・C++・C#
-
20
スレッドの監視方法について
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
VB6.0-整数と余りを求める
-
Excel-vba 文字列と変数を...
-
C言語 exitの使い方
-
VBAで配列のNULL判定
-
世界のナベアツ
-
DWORDって
-
c言語で乱数を扱うときの
-
long型のランダムな値を返す方法
-
DataGridView 複数行同時変更...
-
フォームを開くときに、コンボ...
-
VBAの定数の使い方で、計算値を...
-
○桁にある数値を取得する VB.N...
-
Accessで文字列のバイト数読み込み
-
VisualStudio2022でC言語プログ...
-
VBAのWorksheetFunctionの引数...
-
verilog HDLの[=]と[<=]の使い分け
-
Win32APIでシリアル通信をする...
-
VBSで配列の結果内容から任意の...
-
【エクセル】 関数による電子...
-
VBAでダブルコーテーション入り...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 exitの使い方
-
Excel-vba 文字列と変数を...
-
フォームを開くときに、コンボ...
-
数字の位ごとの値を表示するプ...
-
VB6.0-整数と余りを求める
-
C#で動的にコントロールを取得...
-
VBAで配列のNULL判定
-
フリーランタイマーの時間差分...
-
足して100になるような乱数のア...
-
DWORDって
-
ラジオボタンの値の取得につい...
-
VBAの定数の使い方で、計算値を...
-
コンボボックスの名前を変数に...
-
定数のメリットとは?
-
C#でのIF文 時間比較のやり方
-
Excel VBA Forの使い方について...
-
【C++/CLI】コンボボックスの値...
-
DataGridView 複数行同時変更...
-
世界のナベアツ
-
CGIのPerlの変数をJavaScrip...
おすすめ情報