1

可能重复:
main() 在 C++ 中是否重载?

这是我的代码:

#include <iostream>

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

不同的参数在name mangling之后应该有不同的符号名(void* a, void* b)应该不同于(int, char**),但是这个程序在运行时没有任何问题。

这是为什么?

4

2 回答 2

5

因为main是一种特殊情况,编译器会为它生成特殊代码。通常,main将从crt0用 C 编写的启动例程(通常在较旧的编译器中调用)中调用,因此编译器将生成main就好像它已声明一样extern "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 回答