这是我的代码:
#include <iostream>
int main(void* a, void* b)
{
std::cout << "hello standalone " << std::endl;
return 0;
}
在名称修改后,不同的参数应该具有不同的符号名称(void* a, void* b)
应该与(int, char**
不同),但此程序在运行时没有任何问题。
为什么?
答案 0 :(得分:5)
因为main
是一种特殊情况,编译器会为它生成特殊代码。通常,main
将从启动例程中调用 - 通常在较旧的编译器中称为crt0
- 用C编写,因此编译器将生成main
,就像它被声明为extern "C"
一样。但这绝不是必需的;这只是一个典型的实现。
答案 1 :(得分: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抱怨未解决的外部问题。