C++プログラムをどのように宣言するかは重要ですか?
違いは、1つはmain
を定義する正しい方法ですが、もう1つはそうではありません。
はい、それは重要です。どちらか
_int main(int argc, char** argv)
_
または
_int main()
_
c ++仕様によるmain
の適切な定義です。
void main(int argc, char** argv)
iIRCは、以前のMicrosoftのC++コンパイラに付随する問題でした。
int main
を使用する必要があります。 C標準とC++標準の両方は、main
が値を返すことを指定しています。
C++の場合、intのみが許可されます。 Cの場合、C99はintのみが許可されていると言います。以前の標準では、void
を返すことができました。
つまり、常にint
です。
重要なのは、Cプログラム(およびC++も同じ)は常に成功値またはエラーコードを返す必要があるため、そのように宣言する必要があるということです。
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;
閉じ括弧に遭遇したとき。
かなり前に、私は このページ(void main(void)) を見つけました。これには、「標準では無効であると言う」引数以外の多くの理由が含まれていました。特定のオペレーティングシステム/アーキテクチャでは、スタックが破損したり、その他の厄介なことが発生したりする可能性があります。
仕様を順守している場合は、main
を返すint
を常に宣言する必要があります。
ただし、実際には、ほとんどのコンパイラーはどちらか一方を使用できるため、実際の違いは、シェルに値を返す必要があるかどうかです。