終了ステータス(EXIT_SUCCESSとEXIT_FAILURE)

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 が返されているのがわかる。