将main声明为extern"C"是合法的C++吗?

Myr*_*ria 17 c++ program-entry-point extern linkage

作为一个低级程序员,我经常使用可执行文件的模块启动代码,所以我很清楚像"crt0"这样的代码是如何工作的.当编写C++代码,我通常声明mainextern "C"以匹配C启动代码会做打电话main.因此我通常使用此声明main(wmain如果专门针对Windows):

extern "C" int main(int argv, const char *const *argv)

extern "C" int __cdecl wmain(int argv, const wchar_t *const *argv)
Run Code Online (Sandbox Code Playgroud)

它是合法使用extern "C"main?此外,const char *const *argv的类型是合法的,而不是char *[]

Jes*_*ood 6

链接是实现定义的(3.6.1p3):

main的链接(3.5)是实现定义的.

另外,对于你的后一个问题,这是完全可以接受的const char* const*(3.6.1p2):

实现不应预定义主函数.此功能不应过载.它应该具有int类型的返回类型,否则其类型是实现定义的.


Ani*_*nge 5

extern "C"仅明确告诉 C++ 编译器不要在生成的函数标签上修饰或使用名称争论。

是的,两者都是合法的。