
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
C言語初心者の質問失礼します。
C言語・C++・C#
-
5
C言語の配列をPush(追加)するには
C言語・C++・C#
-
6
C言語での引数の省略方法
C言語・C++・C#
-
7
<unistd.h>をVisualStudioでつかえるようにする
C言語・C++・C#
-
8
複数の変数を宣言する時、同時に初期化?できないでしょうか?
Java
-
9
acceptをalarmでタイムアウトさせる処理がうまくいきません
C言語・C++・C#
-
10
0除算して、落ちるプログラムと落ちないプログラム
C言語・C++・C#
-
11
#include <Windows.h>というヘッダファイルについて
C言語・C++・C#
-
12
C 開放してるのにエラー(double free or corruption (!prev))がでる
C言語・C++・C#
-
13
LinuxでWine使うとどのくらいWindowsのアプリは動くものですか?
UNIX・Linux
-
14
フローチャートで。
C言語・C++・C#
-
15
<math.h>があるのにsqrtが・・・
C言語・C++・C#
-
16
改行を読み飛ばす
C言語・C++・C#
-
17
スレッドの監視方法について
C言語・C++・C#
-
18
ファイルやディレクトリの存在確認を行う方法
C言語・C++・C#
-
19
std::stringからLPCWSTR型への変換
C言語・C++・C#
-
20
プログラムでの数字につく”f”の意味
C言語・C++・C#
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
C言語 exitの使い方
-
Excel-vba 文字列と変数を...
-
[シェルスクリプト] 空文字の判...
-
フォームを開くときに、コンボ...
-
vbaで極大値を抽出する方法
-
C#で動的にコントロールを取得...
-
VBAで配列のNULL判定
-
DataGridView 複数行同時変更...
-
DWORDって
-
関数で複数の値を戻り値として...
-
1つ前の値を変数に保存する方法
-
SELECT文のソートについて
-
数字の位ごとの値を表示するプ...
-
足して100になるような乱数のア...
-
【C++/CLI】コンボボックスの値...
-
functionの第二引数の結果が表...
-
コンボボックスの名前を変数に...
-
データ構造のmapとは?
-
VBAでダブルコーテーション入り...
-
エラーの意味は? Lvalue req...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
C言語 exitの使い方
-
Excel-vba 文字列と変数を...
-
フォームを開くときに、コンボ...
-
VB6.0-整数と余りを求める
-
VBAで配列のNULL判定
-
数字の位ごとの値を表示するプ...
-
フリーランタイマーの時間差分...
-
VBAの定数の使い方で、計算値を...
-
足して100になるような乱数のア...
-
Access2003 オートナンバーの現...
-
DWORDって
-
Xorshiftの値を絞り込む方法を...
-
ラジオボタンの値の取得につい...
-
DataGridView 複数行同時変更...
-
C#で動的にコントロールを取得...
-
VBA コンボボックスの値をスピ...
-
vbaで極大値を抽出する方法
-
Nullってどういう意味ですか?
-
コンボボックスの名前を変数に...
-
データ構造のmapとは?
おすすめ情報