为什么不编译?链接器找不到main,但为什么会这样呢?
namespace somenamespace{
int main(void){
return 0;
}
}
Run Code Online (Sandbox Code Playgroud)
Chu*_*dad 49
3.6.1/1 - " 程序应包含一个名为main的全局函数,它是程序的指定开始.它是实现定义的,是否需要独立环境中的程序来定义主函数.[注意:in一个独立的环境,启动和终止是实现定义的;启动包含具有静态存储持续时间的命名空间作用域对象的构造函数的执行;终止包含具有静态存储持续时间的对象的析构函数的执行.-end note]
您的示例将"main"(用作程序入口点)作为命名空间函数,因此您的代码格式错误.这并不意味着函数'main'不能像你那样定义.它只是意味着对于独立程序,需要根据标准定义的签名定义"main"的全局命名空间范围.托管计划
Omn*_*ous 26
链接器正在寻找::main,而不是::somenamespace::main.该main是在程序启动时调用必须在全局命名空间.
@Chubsdad已经指出了标准中的相关语言.但是这个标准现在写成了一个奇怪的"标准",与法律术语有很多相似之处.我觉得一个简单的英语陈述,说明发生了什么可能会更好.
注意:标准以这种方式编写是有原因的.在标准中,您希望您使用的每个术语具有非常精确和明确定义的含义,并且您不希望该含义根据上下文而变化,因为它使标准更难以解释.这实际上非常类似于法律术语看起来像它的方式.