1

重複の可能性:
main() は C++ でオーバーロードされていますか?

ここに私のコードがあります:

#include <iostream>

int main(void* a, void* b)
{
    std::cout << "hello standalone " << std::endl;                      
    return 0;
}

パラメータが異なれば、名前マングリングの後のシンボル名void* a, void* b)も異なるはずです( は とは異なる必要があります(int, char**) が、このプログラムは実行時に問題はありません。

何故ですか?

4

2 に答える 2

5

mainは特殊なケースであり、コンパイラはそのための特別なコードを生成するためです。通常、C で記述されたスタートアップ ルーチン (古いコンパイラでmain呼び出されることが多い) から呼び出されるため、コンパイラは. しかし、それは必須ではありません。これは単なる典型的な実装です。crt0mainextern "C"

于 2012-05-23T08:00:45.410 に答える
3

コンパイラに依存します。main に必要な標準の署名は次のとおりです。

int main()
int main(int argc, char** argv)
int main(int argc, char* argv[])

ただし、これらに加えて、コンパイラは他の署名も自由に提供できます。

たとえば、gcc 4.3.4 はコードを拒否します - http://ideone.com/XZp2h

MSVS は、未解決の外部情報について不平を言います。

于 2012-05-23T07:54:55.953 に答える