为什么名字错误没有打破我的计划?

时间:2012-05-23 07:53:12

标签: c++ main function-signature

  

可能重复:
  Is main() overloaded in C++?

这是我的代码:

#include <iostream>

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

在名称修改后,不同的参数应该具有不同的符号名称(void* a, void* b)应该与(int, char**不同),但此程序在运行时没有任何问题。

为什么?

2 个答案:

答案 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抱怨未解决的外部问题。