main() 関数での return 文や、exit() 関数でプログラムを終了するときに渡す値は、終了ステータスといって、プログラムからシステム(OS)に返される。プログラムにもよるけど、通常は正常終了なら 0、何らかのエラーが起これば 1 を返すようだ。
stdlib.h には、そのためのマクロ、EXIT_SUCCESS と EXIT_FAILURE が定義されている。
ちょっと使ってみよう。次のプログラムは、名前をひとつパラメータにとってあいさつを返す。パラメータが無かったり多すぎる場合には、使い方を表示して終了する。その際、EXIT_SUCCESS または EXIT_FAILURE を終了ステータスとして返している。
#include #include void Usage(char prog_name[]); int main(int argc, char *argv[]) { if (argc != 2) { Usage(argv[0]); exit(EXIT_FAILURE); } printf("Hello, %s!\n", argv[1]); return EXIT_SUCCESS; } void Usage(char prog_name[]) { printf("Usage: %s \n", prog_name); }
実行結果。終了ステータスは、特殊な変数 $? に格納されているので、それも表示してみる。まずは正常な使い方の場合:
takatoh@nightschool $ ./greeting Andy Hello, Andy! takatoh@nightschool $ echo $? 0
つぎに、パラメータがない、異常終了の場合:
takatoh@nightschool $ ./greeting Usage: ./greeting <name> takatoh@nightschool $ echo $? 1
正常な場合には、終了ステータスとして 0 が、そうでない場合には 1 が返されているのがわかる。