#include <iostream>
using namespace std;
bool RunBeforeMain ()
{
cout << "Before main()!" << endl;
return true;
}
// This variable here causes the above function to be called
bool ignore_this_variable = RunBeforeMain ();
int main ()
{
cout << "Start of main()" << endl;
return 0;
}
3条答案
按热度按时间mlmc2os51#
当你运行一个python程序时,解释器会从上到下运行它。在C++中,这种情况不会发生。编译器将你所有的函数构建成机器码的小块,然后链接器将它们连接起来。在运行时,操作系统调用你的
main
函数,一切都从那里开始。在这种情况下,函数之外的代码是没有意义的--它什么时候运行呢?35g0bw712#
这可以被认为是C和Python之间的风格差异。然而,这也有很好的理由。在C和C中,有一个非常明确和具体的地方,你的代码从那里开始执行,那就是
main()
函数的开始(当然,这只是真相的近似,但我们现在可以忽略这一点。)实际上,一个C/C++程序以main()
函数开始和结束,在我看来,当你想了解一个程序实际上做什么时,这个函数非常有帮助。将此与另一种选择进行对比;代码分散在整个文件中以及函数和诸如此类的东西之间。即使是在一个组织良好的Python程序中,您也会将代码主体置于
if __name__ == "__main__":
之下,不是吗?现在来看看一些更高级的东西。有一些方法可以让代码在
main()
函数被调用之前运行。下面是其中之一:同样,所有全局变量和类的所有
static
成员的构造函数以及一些依赖于平台的东西都在main()
之前运行。类似地,有一些方法可以让代码在main()
完成之后运行。这些方法通常是main()
开始之前构造的对象的析构函数,以及注册到atexit()
函数的函数。ilmyapht3#
main()是程序的访问点,所以你想写的任何代码都需要有一个从那个点开始的执行顺序。
静态变量在main()执行之前初始化,因此您可以在此之前初始化任何所需的变量。
但是如果你想运行启动程序状态的代码,你应该在程序的开头就这样做,滥用静态变量,用一些构造函数。