主要在命名空间
回答
3.6.1/1 - “计划须包含一个称为主全局函数,这 是 程序指定的开始,是实现定义是否在程序 。独立 环境需要以限定 主函数[注意:在一个 独立环境,启动和终止 是实现定义; 启动包含 构造对于n的对象的执行。 amespace 范围内有静态存储时间; 终止包含执行 对象的析构函数具有静态的 存储持续时间。 - 注意]
您的示例具有'main'(用作程序入口点)作为名称空间函数,因此您的代码格式不正确。这并不意味着函数'main'不能像你那样被定义。这意味着对于
独立程序,必须符合标准定义签名的全局名称空间范围定义'main'。
托管的程序
链接器需要安排程序的执行从一个名为“main”的全局函数开始。 benig能够创建你自己的命名空间的所有要点 - 就像你所做的那样 - 是避免把东西放在全局命名空间中,这样他们就不会被其他代码或链接器意外地挑选出来。你明确地说:“我调用这个函数main,但这只在somenamespace
的上下文中有意义 - 如果你不知道somenamespace,你将找不到或者不能使用它”。
执行方面,由于名称空间的原因,主要符号的已损坏名称已从预期名称更改,所以链接器只是找不到它需要的符号表条目。
链接器正在寻找::main
,而不是::somenamespace::main
。在程序启动时调用的main
必须位于全局名称空间中。
@Chubsdad有pointed you at the relevant language in the standard that states this。但是这个标准现在被写入了一个与法律术语非常相似的奇怪的“标准”。我觉得一个简单的英语声明可能会更好。
备注:这样写标准是有原因的。在标准中,你希望每一个术语都有一个非常精确和明确的含义,并且你不希望这个含义因上下文而异,因为它使标准更难解释。这实际上非常类似于法律术语看起来如此的原因。
我同意这个答案。不要引用标准,除非它是语言的一个模糊区域,他们专门要求它,或者您需要支持您的声明。它变得很烦人。 – GManNickG 2010-10-18 05:21:28
@Patatoswatter - 是的,的确如此。 Legalese,恕我直言,实际上是很难解释,因为它隐含依赖于数百年的法律历史。正如你所说,标准是非常独立的。它有几个部分,其中使用的所有精确术语都经过精心定义。 – Omnifarious 2010-10-18 05:27:22
- 1. 在命名空间
- 2. 在命名空间
- 3. 在命名空间
- 4. 在命名空间
- 5. 命名空间中不存在命名空间名称'Notify'Twilio.Rest
- 6. 重命名命名空间
- 7. 命名空间
- 8. 命名空间
- 9. 在MonoTouch中重命名命名空间
- 10. 如何在多个命名空间中命名空间函数?
- 11. JavaScript:在命名空间内遍历/浏览命名空间?
- 12. PHP命名空间和要求
- 13. Php命名空间vs要求
- 14. C++命名空间....匿名命名空间是合法的?
- 15. 在jQuery中命名空间?
- 16. 在这个命名空间
- 17. 加入不同命名空间的命名空间房间
- 18. 类型或命名空间名称LayoutsPageBase'不存在命名空间存在“Microsoft.SharePoint.WebControls”
- 19. 类型或命名空间名称“NMO”不存在命名空间存在“Microsoft.SqlServer.Management”
- 20. WPF命名空间
- 21. NHibernate命名空间
- 22. Clojure命名空间
- 23. XML命名空间
- 24. JsDoc命名空间
- 25. Microsoft.Contracts命名空间
- 26. 与命名空间
- 27. 从命名空间
- 28. FluentNHibernate.Mapping.Builders命名空间
- 29. StreamElements命名空间
- 30. Xalan - 命名空间
啊我明白了,谢谢! – shuttle87 2010-10-18 05:00:58