Last Update 2022/06/16
main()関数の呼び出し、および復帰時に関する動作確認
テスト概要
コマンドライン引数無しでの呼び出し
コマンドライン引数取得を伴う呼び出し
戻り値としてのマクロの使用
その1
コマンドライン引数無しでの呼び出し
sample1.c(実行ファイル sample1)
#include <stdio.h>
#include <stdlib.h>
int main(void) /* 引数無し */
{
printf("「sample」実行\n");
return EXIT_SUCCESS;
}
実行結果
$ ./sample1
「sample」実行
$ ./sample1 arg1 arg2
「sample」実行 <--- コマンドライン引数がある場合でもエラーは発生しない
その2
コマンドライン引数取得を伴う呼び出し
sample2.c(実行ファイル sample2)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[]) /* 引数有り */
{
int i;
printf("引数個数 : %d\n", argc);
for (i=0; i<argc; i++)
{
if (i == 0)
{
printf("argv[0] --- 呼び出されたプログラム名 : %s\n", argv[0]);
}
else
{
printf("argv[%d] --- コマンドライン引数[%d番目] : %s\n", i, i, argv[i]);
}
}
return EXIT_SUCCESS;
}
実行結果
$ ./sample2 arg1 arg2
引数個数 : 3
argv[0] --- 呼び出されたプログラム名 : ./sample2
argv[1] --- コマンドライン引数[1番目] : arg1
argv[2] --- コマンドライン引数[2番目] : arg2
その3
戻り値としてのマクロの使用
sample3.c(実行ファイル sample3)
#include <stdio.h>
#include <stdlib.h>
int main(int argc, char *argv[])
{
printf("引数個数 : %d\n", argc);
if (argc != 2)
{
printf("引数の個数に問題があります\n");
return EXIT_FAILURE;
}
printf("引数1 : %s\n", argv[1]);
return EXIT_SUCCESS;
}
stdlib.hにおけるマクロの定義部分
︙
/* We define these the same for all machines.
Changes from this to the outside world should be done in `_exit'. */
#define EXIT_FAILURE 1 /* Failing exit status. */
#define EXIT_SUCCESS 0 /* Successful exit status. */
︙
実行結果
$ ./sample3 arg1 ; echo "終了ステータス : $?"
引数個数 : 2
引数1 : arg1
終了ステータス : 0 <--- EXIT_SUCCESS(成功時)
$ ./sample3 arg1 arg2 ; echo "終了ステータス : $?"
引数個数 : 3
引数の個数に問題があります
終了ステータス : 1 <--- EXIT_FAILURE(失敗時)
実行環境
GCC-8.2.0
GNU C Library 2.28
GNU Binutils 2.31.1
GNU bash, version 5.1.16
GNU C Library 2.28
GNU Binutils 2.31.1
GNU bash, version 5.1.16
コード例・出力内容中の表記
・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。
・「︙」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。