[英]Is it legal C++ to declare main as extern “C”?
作为一个低级程序员,我经常使用可执行文件的模块启动代码,所以我很清楚像“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"
是否合法? 另外, const char *const *
对于argv的类型是合法的而不是char *[]
?
链接是实现定义的(3.6.1p3):
main的链接(3.5)是实现定义的。
另外,对于后一个问题,使用const char* const*
(3.6.1p2)是完全可以接受的:
实现不应预定义主函数。 此功能不应过载。 它应该具有int类型的返回类型,否则其类型是实现定义的。
标准祝福两种形式的main
:
int main()
int main(int argc, char* argv[])
这些表单是任何实现必须识别的。 其他任何事情都可以通过您的代码轻松实现,让您充满创意。 这不是非法的,因为标准特别允许它识别其他形式的main
。
启动代码通常以允许它调用main
的方式编写,没有链接声明,因为这就是标准main
应该如何。 编译器通常将main
特别视为具有C链接,如标准所允许的那样,因此启动代码如何声明它。 这对普通程序员来说并不重要。 他只需要遵循标准。
extern "C"
只告诉C ++编译器没有在生成的函数标签上进行装饰或使用名称争用。
是的,两者都是合法的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.