Main function
ホストされた実行環境で動作するようにコーディングされたすべてのCプログラムは、プログラムの指定された開始点である
main
という名前の関数の定義(プロトタイプではなく)を含んでいます。
int
main
(void)
{
本体
}
|
(1) | ||||||||
int
main
(
int
argc
,
char
*
argv
[
]
)
{
本体
}
|
(2) | ||||||||
| /* その他の実装定義シグネチャ */ (C99以降) | (3) | ||||||||
目次 |
パラメータ
| argc | - | プログラムが実行される環境からプログラムに渡される引数の数を表す非負の値。 |
| argv | - | argc + 1 個のポインタからなる配列の最初の要素へのポインタ。最後の要素はnullであり、それ以前の要素(存在する場合)はホスト環境からプログラムに渡された引数を表す文字列を指す。 argv [ 0 ] がnullポインタでない場合(または同等に argc > 0の場合)、これはプログラム名を表す文字列を指し、ホスト環境からプログラム名が利用できない場合は空となる。 |
名前
argc
と
argv
は「引数の数(argument count)」と「引数ベクトル(argument vector)」を表し、伝統的に使用されていますが、パラメータには他の名前を選択することも、それらの型の異なるが同等の宣言も可能です:
int
main
(
int
ac,
char
**
av
)
も同様に有効です。
一般的な実装定義のmain関数の形式として int main ( int argc, char * argv [ ] , char * envp [ ] ) があり、ここでは型 char ** の第三引数が追加され、 実行環境変数 へのポインタの配列 を指します。
戻り値
return文が使用される場合、戻り値は暗黙的な exit() 呼び出しの引数として使用されます(詳細は後述)。値0と EXIT_SUCCESS は正常終了を示し、値 EXIT_FAILURE は異常終了を示します。
説明
main
関数は、静的記憶域期間を持つすべてのオブジェクトが初期化された後、プログラム起動時に呼び出されます。これは
ホスト環境
(つまり、オペレーティングシステムが存在する環境)で実行されるプログラムの指定されたエントリーポイントです。任意の
フリースタンディング
プログラム(ブートローダー、OSカーネルなど)のエントリーポイントの名前と型は実装定義です。
2パラメータ形式のmain関数のパラメータは、実行環境から任意のマルチバイト文字列を渡すことを可能にします(これらは一般に コマンドライン引数 として知られています)。ポインタ argv [ 1 ] .. argv [ argc - 1 ] は、これらの各文字列の先頭文字を指します。 argv [ 0 ] (nullでない場合)は、プログラム自体の起動に使用された名前を表すnull終端マルチバイト文字列の先頭文字へのポインタです(または、ホスト環境でこれがサポートされていない場合、 argv [ 0 ] [ 0 ] がゼロであることが保証されます)。
ホスト環境が大文字と小文字の両方を提供できない場合、コマンドライン引数は小文字に変換されます。
文字列は変更可能であり、プログラム終了まで変更内容は保持されますが、これらの変更はホスト環境に反映されません:例えば strtok と共に使用することができます。
argv
が指す配列のサイズは少なくとも
argc+1
であり、最後の要素
argv[argc]
はnullポインタであることが保証されています。
main
関数にはいくつかの特別な特性があります:
|
main関数が値を指定しない return を実行する場合、または同等に、 } に到達して return を実行せずに終了する場合、ホスト環境に返される終了ステータスは未定義です。 |
(C99まで) |
|
main関数の戻り値の型が 互換性 のない場合(例: void main ( void ) )、ホスト環境に返される値は未規定です。戻り値の型が int と互換性があり、制御が終端の } に到達した場合、環境に返される値は return 0 ; を実行した場合と同じです。 |
(C99以降) |
例
プログラムに入力データの場所と結果の書き込み先を指定する方法を示します。 呼び出し方法: ./a.out indatafile outdatafile
出力例:
argc = 3 argv[0] --> ./a.out argv[1] --> indatafile argv[2] --> outdatafile argv[argc] = (nil)
参考文献
- C23規格 (ISO/IEC 9899:2024):
-
- 5.1.2.2.1 プログラム起動 (p: 未定)
- C17規格 (ISO/IEC 9899:2018):
-
- 5.1.2.2.1 プログラム起動 (p: 10-11)
- C11規格 (ISO/IEC 9899:2011):
-
- 5.1.2.2.1 プログラム起動 (p: 13)
- C99規格 (ISO/IEC 9899:1999):
-
- 5.1.2.2.1 プログラム起動 (p: 12)
- C89/C90標準 (ISO/IEC 9899:1990):
-
- 5.1.2.2 ホスト環境
関連項目
|
C++ ドキュメント
for
main
function
|
`タグ内の「main」は翻訳せず保持
- 「function」は翻訳せず保持(C++用語のため)
- HTMLタグ、属性、構造は完全に保持
- フォーマットとスペースは元のまま維持