C言語のmain()関数の有効なシグネチャは何ですか?
質問
C言語のmain関数の有効なシグネチャは何ですか?私は知っています。
int main(int argc, char *argv[])
他に有効なものはありますか?
どのように解決するのですか?
この
C11
規格では、この二つについて明示的に言及しています。
int main(void);
int main(int argc, char* argv[]);
は、以下の脚注で "or equivalent" というフレーズに言及していますが。
このように
int
に置き換えることができます。typedef
という名前で定義されています。int
のタイプ、またはargv
は次のように書くことができる。char ** argv
といった具合になります。
さらに、より多くの(実装上定義された)可能性を提供するものでもあります。
関連するテキスト(セクション
5.1.2.2.1
から、この特定の側面は変更されていません。
C99
) の状態になります。
プログラム起動時に呼び出される関数の名前は
main
. 実装では、この関数のプロトタイプを宣言していません。この関数は,戻り値の型としてint
で、パラメータなしで定義されなければならない。int main(void) { /* ... */ }
または2つのパラメータ(ここでは
argc
とargv
しかし、それらは宣言された関数に局所的であるため、どのような名前でも使用することができます)。int main(int argc, char *argv[]) { /* ... */ }
またはそれと同等の方法、あるいは他の実装で定義された方法で行います。
それらが宣言されている場合、パラメータは
main
関数へのパラメータは,次の制約に従わなければならない。
の値は
argc
は非負でなければならない。
argv[argc]
はヌルポインタでなければならない。の値が
argc
の値が 0 よりも大きい場合、配列のメンバargv[0]
を通してargv[argc-1]
は,プログラム起動前にホスト環境によって実装定義された値が与えられる文字列へのポインタを含まなければならない。これは,ホスト環境内の他の場所からプログラム起動前に決定された情報をプログラムに供給することを意図している。ホスト環境が大文字と小文字の両方を含む文字列を提供することができない場合,実装は,文字列が小文字で受信されることを保証しなければならない。の値が
argc
の値が0より大きい場合、その文字列はargv[0]
が指す文字列はプログラム名を表します。argv[0][0]
は,ホスト環境からプログラム名を利用できない場合には,ヌル文字とする。もしargc
の値が1より大きい場合はargv[1]
を通してargv[argc-1]
はプログラムのパラメータを表す。パラメータは
argc
とargv
で指される文字列とargv
の配列が指す文字列は,プログラムによって変更可能であり,プログラムの起動から終了までの間,最後に格納された値を保持しなければならない。
これはホスト環境、つまりCプログラムで通常見られるような環境での話であることに注意してください。独立した環境(組み込みシステムなど)では、以下のように制約が少なくなります。
5.1.2.1
で述べられているように、はるかに制約が少なくなります。
フリースタンディング環境(Cプログラムの実行がオペレーティングシステムの恩恵を受けずに行われる可能性がある)では、プログラム起動時に呼び出される関数の名前と型は実装で定義されている。第4節で要求される最小限のセット以外の、自立型プログラムで利用可能なあらゆるライブラリ機能は、実装で定義されるものである。
関連
-
VSCodeでCプログラムを書くとエラーになる:ソースファイル "stdio.h" を開くことができない
-
[解決済み] SQLiteのINSERT/per-secondのパフォーマンスを向上させる
-
[解決済み] C言語では「?」演算子は何をするのですか?
-
[解決済み] C++でextern "C "を使用した場合の効果は?
-
[解決済み] const int*、const int * const、int const *の違いは何ですか?
-
[解決済み] CSS Flexboxで、"justify-items "と "justify-self "プロパティはなぜないのですか?
-
[解決済み] CとC++でmain()は何を返すべきですか?
-
[解決済み] アセンブリがCより速いのはどんなとき?[クローズド]
-
[解決済み】C/C++の"-->"演算子とは何ですか?
-
[解決済み】高放射能環境下で使用するアプリケーションのコンパイルについて
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
error: '.' トークンの前にunqualified-idを指定する必要があります。
-
[解決済み] C++でmainの適切な宣言は何ですか?
-
[解決済み] MIPSのネストされたForループと配列の使用
-
[解決済み] Windows用Cコンパイラ?[クローズド]
-
[解決済み] C関数から文字列を返す
-
[解決済み] mallocの結果はキャストするのですか?
-
[解決済み] C言語のコードで「:-!」とは何ですか?
-
[解決済み] CとC++でmain()は何を返すべきですか?
-
[解決済み] printfは、フォーマット文字列の中に改行がないと、呼び出し後にフラッシュしないのはなぜですか?
-
[解決済み] この4行のトリッキーなC言語のコードの背後にある概念