作为一名低级程序员,我经常使用可执行文件的模块启动代码,因此我非常了解"crt0“这样的代码是如何工作的。在编写C++代码时,我通常会将main
声明为extern "C"
,以便与C启动代码调用main
的方式相匹配。因此,我通常对main
使用此声明(如果专门针对Windows,则使用wmain
):
extern "C" int main(int argv, const char *const *argv)
extern "C" int __cdecl wmain(int argv, const wchar_t *const *argv)
在main
上使用extern "C"
合法吗?另外,相对于char *[]
,对于argv的类型,const char *const *
是否合法
发布于 2013-11-06 11:27:24
extern "C"
只明确地告诉C++编译器不要在生成的函数标签上进行修饰或使用名称纠缠。
是的,两者都是合法的。
发布于 2013-11-06 12:26:17
该标准支持两种形式的main
int main()
int main(int argc, char* argv[])
这些形式是任何实现都必须识别的。其他的一切都是你的实现,简单地使用你的代码,让你更有创造力。这不是非法的,因为标准明确允许它识别其他形式的main
。
启动代码通常以允许它调用没有链接声明的main
的方式编写,因为标准规定main
应该是这样的。编译器通常将main
特殊地视为具有C链接,这是标准所允许的,所以启动代码就是这样声明它的。正常的程序员对此并不感兴趣。他只需要遵循标准。
https://stackoverflow.com/questions/19803522
复制相似问题