Arm*_*yan 16 c++ program-entry-point
C++03 3.6.1.3:函数main不得在程序中使用(3.2)....
我想知道为什么这个规则存在...是否有人知道任何系统/实现,如果使用main,它将是一个问题?
PS 1.我知道该术语的定义used.2.我知道有一些简单的解决方法,比如从main()调用单个MyMain()并使用MyMain()代替.3.问题是关于现实世界的实施,如果不存在限制则会产生问题.谢谢!
Chr*_*cke 35
除了其他答案:c ++规范保证在调用main之前发生所有静态初始化.
如果代码可以调用main,那么一些静态范围对象可以调用main,在这种情况下会违反基本保证.
规范不能说"静态作用域对象不应该调用main()",因为许多对象并不是专门为在静态作用域实例化而编写的.它也不能说构造函数不应该调用main() - 因为它很难审计并证明构造函数没有调用方法,调用方法,有时可能调用main().
Ton*_*roy 16
我想这会保留一个实现的自由,用前缀main代码来构造全局和静态,接受任何标识环境和命令行参数的参数,并将它们映射到C++的argc/argv/env约定,构造一个合适的堆栈和异常框架考虑到并非所有环境都允许可执行映像将任何其他符号指定为之前运行的初始化代码main().
类似地,可以附加清理代码main(),以及对OS的调用,其具有从C和C++的0 /非零约定到该特定OS使用的实际成功/失败值的一些映射.
因此,main从其他地方打电话可能会尝试再次重新初始化应用程序框架或强制意外退出操作系统 - 这听起来对我来说是灾难性的.
C++main()是一个奇怪的小函数,它具有不同的异常处理语法,不必返回值,即使它必须定义为返回 int 等。我不知道这是否会影响任何实际实现,但是我猜想存在限制是为了给编译器编写者一些他们如何实现main().