main
C++ (または C) プログラムで関数を宣言する方法は重要ですか?
8 に答える
違いは、1 つは を定義する正しい方法main
であり、もう 1 つはそうでないことです。
はい、それは重要です。また
int main(int argc, char** argv)
また
int main()
main
は、C++ 仕様ごとの適切な定義です。
void main(int argc, char** argv)
IIRC は、古い Microsoft の C++ コンパイラに付属していた倒錯ではありません。
Bjarne Stroustrupは次のように明確に述べています。
定義
void main()
は C++ ではなく、C++ であったことも、C であったことさえありません。
リファレンスを参照してください。
を使用する必要がありますint main
。C と C++ の両方の標準でmain
、 が値を返すように指定されています。
C++ の場合、int のみが許可されます。C の場合、C99 は int のみが許可されていると述べています。以前の基準ではvoid
返品が許可されていました。
つまり、常にint
.
ポイントは、C プログラム (および C++ も同じ) は常に成功値またはエラー コードを返す (すべきか?) ため、そのように宣言する必要があるということです。
仕様に従っている場合は、常に をmain
返すことを宣言する必要がありint
ます。
ただし、実際には、ほとんどのコンパイラではどちらでも問題なく使用できるため、実際の違いは、シェルに値を返す必要があるかどうかです。
C++ では、main()
を返す必要がありint
ます。ただし、C99 ではmain()
非int
戻り型を使用できます。以下は、C99 標準からの抜粋です。
5.1.2.2.1 プログラムの起動
プログラムの起動時に呼び出される関数は main と呼ばれます。実装は、この関数のプロトタイプを宣言していません。これは、戻り値の型が int で、パラメーターなしで定義されます。
int main(void) { /* ... */ }
または 2 つのパラメーター (ここでは argc および argv と呼ばれますが、宣言されている関数に対してローカルであるため、任意の名前を使用できます):
int main(int argc, char *argv[]) { /* ... */ }
または同等のもの; または他の実装定義の方法で。
また、gcc はコンパイルを実行しますvoid main()
が、実際には、return 0;
右中括弧に遭遇するとコンパイルを実行することに注意してください。