質問するログイン新規登録

回答編集履歴

2

修正漏れ

2020/06/20 05:05

投稿

raccy
raccy

スコア21784

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  `main`関数からの戻り値はプロセスの[終了ステータス](https://ja.wikipedia.org/wiki/%E7%B5%82%E4%BA%86%E3%82%B9%E3%83%86%E3%83%BC%E3%82%BF%E3%82%B9)になります。
2
2
 
3
- プログラムの中にはプログラムの内部でプログラムを実行する(Cであれば`system`関数等)場合があります。呼び出す側のプロセスを親プロセス、呼び出される側のプロセスを子プロセスと言います。あるプログラムAが実行され、そのプロセスが動作中に、別のプログラムBを内部で実行したとしましょう。その時、プロセスは親子関係にあり、親プロセスではプログラムAが、子プロセスではプログラムBが動作することになります。プログラムBのコードを全て実行し、子プロセスが終了したとします。そのとき、子プロセスは親プロセスに終了を渡します。プログラムAではその終了ステータスによって動作を分岐させることができます。
3
+ プログラムの中にはプログラムの内部でプログラムを実行する(Cであれば`system`関数等)場合があります。呼び出す側のプロセスを親プロセス、呼び出される側のプロセスを子プロセスと言います。あるプログラムAが実行され、そのプロセスが動作中に、別のプログラムBを内部で実行したとしましょう。その時、プロセスは親子関係にあり、親プロセスではプログラムAが、子プロセスではプログラムBが動作することになります。プログラムBのコードを全て実行し、子プロセスが終了したとします。そのとき、子プロセスは親プロセスに終了ステタスを渡します。プログラムAではその終了ステータスによって動作を分岐させることができます。
4
4
 
5
5
  この終了ステータスは整数値(とり得る範囲は環境によって異なる)で、ほとんどの環境では0が成功終了(正常終了)です。Cでは、この終了ステータスを簡単に返せるようにと、`main`関数の戻り値によって、どんな終了ステータスで終了したかを選べるようにしています。Cの中でも、0が成功終了を意味しており、`return 0;`となっている場合は、そのプロセスは成功終了を意味する終了ステータスを渡すようになっています。
6
6
 
@@ -11,9 +11,9 @@
11
11
  FAQ
12
12
 
13
13
  1. 成功終了を表す終了ステータスが0以外の環境(存在するかは不明)で、`return 0;`とした場合は、異常終了になるのですか?
14
- いいえ、0または`EXIT_SUCCESS`(成功終了を表すマクロ、0とは限りない)を`main`でreturn(またはexit関数に渡す)した場合、その処理系における成功終了を表す終了になります。`main`の`return 0;`はどのような状況においても、成功終了を意味します。
14
+ いいえ、0または`EXIT_SUCCESS`(成功終了を表すマクロ、0とは限りない)を`main`でreturn(またはexit関数に渡す)した場合、その処理系における成功終了を表す終了ステタスになります。`main`の`return 0;`はどのような状況においても、成功終了を意味します。
15
15
  2. 0以外は異常終了なのですか?
16
- Cの仕様で定義されているのは`EXIT_FAILURE`の場合に失敗終了を意味するということだけです。それ以外は処理依存になります。ただし、ほとんどの処理系では、0-255の範囲ではそのまま終了になり、0以外は異常とみなされます。
16
+ Cの仕様で定義されているのは`EXIT_FAILURE`の場合に失敗終了を意味するということだけです。それ以外は処理依存になります。ただし、ほとんどの処理系では、0-255の範囲ではそのまま終了ステタスになり、0以外は異常とみなされます。
17
17
  3. `return 0;`を省略しましたが、正常終了しました。バグですか?
18
18
  戻り値が`void`ではない関数の中で、唯一`main`関数のみ`return`を省略出来ます。省略された場合は、一番最後に`return 0;`が存在するとみなされます。
19
19
  4. どういうときに使うのですか?

1

終了コードになっていたのを修正

2020/06/20 05:05

投稿

raccy
raccy

スコア21784

answer CHANGED
@@ -2,13 +2,13 @@
2
2
 
3
3
  プログラムの中にはプログラムの内部でプログラムを実行する(Cであれば`system`関数等)場合があります。呼び出す側のプロセスを親プロセス、呼び出される側のプロセスを子プロセスと言います。あるプログラムAが実行され、そのプロセスが動作中に、別のプログラムBを内部で実行したとしましょう。その時、プロセスは親子関係にあり、親プロセスではプログラムAが、子プロセスではプログラムBが動作することになります。プログラムBのコードを全て実行し、子プロセスが終了したとします。そのとき、子プロセスは親プロセスに終了コードを渡します。プログラムAではその終了ステータスによって動作を分岐させることができます。
4
4
 
5
- この終了は整数値(とり得る範囲は環境によって異なる)で、ほとんどの環境では0が成功終了(正常終了)です。Cでは、この終了を簡単に返せるようにと、`main`関数の戻り値によって、どんな終了ステータスで終了したかを選べるようにしています。Cの中でも、0が成功終了を意味しており、`return 0;`となっている場合は、そのプロセスは成功終了を意味する終了ステータスを渡すようになっています。
5
+ この終了ステタスは整数値(とり得る範囲は環境によって異なる)で、ほとんどの環境では0が成功終了(正常終了)です。Cでは、この終了ステタスを簡単に返せるようにと、`main`関数の戻り値によって、どんな終了ステータスで終了したかを選べるようにしています。Cの中でも、0が成功終了を意味しており、`return 0;`となっている場合は、そのプロセスは成功終了を意味する終了ステータスを渡すようになっています。
6
6
 
7
7
  なお、`exit`関数で即座に完了することもでき、`exit`関数への引数も同じように解釈されます。(逆に言うと、`return 0;`は`exit(0);`と同じです。)
8
8
 
9
9
  C++はCの拡張であるため、Cのこの仕様を引き継いでおり、同様の動作となります。
10
10
 
11
- Q&A
11
+ FAQ
12
12
 
13
13
  1. 成功終了を表す終了ステータスが0以外の環境(存在するかは不明)で、`return 0;`とした場合は、異常終了になるのですか?
14
14
  いいえ、0または`EXIT_SUCCESS`(成功終了を表すマクロ、0とは限りない)を`main`でreturn(またはexit関数に渡す)した場合、その処理系における成功終了を表す終了コードになります。`main`の`return 0;`はどのような状況においても、成功終了を意味します。