为什么名字改编是不是打破我的计划? [重复](why name mangling isn'

2019-10-16 18:24发布

可能重复:
主要是()重载在C ++?

这里是我的代码:

#include <iostream>

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

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

这是为什么?

Answer 1:

因为main是一种特殊情况,并且编译器为它生成特殊代码。 通常情况下, main会从启动调用程序,通常被称为crt0在旧的编译器,用C写的,所以编译器将生成main ,就好像它被宣布extern "C" 。 但是,这绝不是必需的; 这是一个只是一个典型的实现。



Answer 2:

这取决于编译器。 主标准要求的签名是:

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

但是,除了这些,编译器是免费提供其他签名也是如此。

例如,GCC 4.3.4拒绝你的代码- http://ideone.com/XZp2h

MSVS抱怨无法解析的外部。



文章来源: why name mangling isn't breaking my program? [duplicate]