【发布时间】:2010-11-16 01:36:33
【问题描述】:
这可能是一个简短的问题,但我从未找到令人满意的答案:
main() 函数在大型 C++ 项目中通常包含哪些代码?认为它通常只是初始化一个(包装)类对象并调用其中的一个函数来启动它是一个错误的假设吗?
为什么 main() 首先不是一个方法?是为了保持与 C 的向后兼容性吗?
【问题讨论】:
-
它不是成员函数的原因是你需要一种方法来指定它是哪个类的成员函数。 C++ 没有 Java 的 manifest,也没有反射。
-
从更概念的层面来看,每个程序都需要一个入口点,在“经典”C++ 的情况下,这是在编译器生成的可执行文件中,当程序启动时,不存在该 main 的类可能是一种方法。在解释型语言中,运行时首先执行并在应用程序启动之前设置一个上下文以供运行,因此如果语言/运行时允许/希望,入口点是某个先前设置类的方法/成员是可能的。
-
@Mark:什么?编译器负责在 main() 执行之前发出代码以初始化各种事物,包括类的静态成员。在某种程度上可以说类在 C++ 中运行时完全存在,在调用入口点之前存在大量类。甚至可能存在大量物体。
-
@onebyone 一个“标准”c++ 编译器发出代码来初始化静态成员和对象,它被告知,stdlib 的某些实现或用户代码可能创建静态成员/类/对象无关紧要这个问题。 C++ 没有按照规范创建 main 可能是其成员的根类。