Loose-Info.com
Last Update 2022/06/16
TOP - 各種テスト - C言語 - main()関数

main()関数の呼び出し、および復帰時に関する動作確認

テスト概要

その1
コマンドライン引数無しでの呼び出し

その2
コマンドライン引数取得を伴う呼び出し

その3
戻り値としてのマクロの使用


その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


コード例・出力内容中の表記

・実行例中の太字表記部分は、コマンドなどの入力された文字列を示します。
・「」や「...」の着色省略表記は、 実際のソースコードや出力内容などを省略加工した部分を示します。