python 为什么c++语句必须包含在函数中?

6yoyoihd  于 2023-02-21  发布在  Python
关注(0)|答案(3)|浏览(143)

作为一个来自python的c新手,我不知道为什么c不允许函数外的语句(在全局名称空间中?),看起来在main()被调用或者其他函数被声明之前做一些初始化是有用的(我不想和编译器争论,我只是想知道用这种方法实现它背后的思想过程)。

mlmc2os5

mlmc2os51#

当你运行一个python程序时,解释器会从上到下运行它。在C++中,这种情况不会发生。编译器将你所有的函数构建成机器码的小块,然后链接器将它们连接起来。在运行时,操作系统调用你的main函数,一切都从那里开始。在这种情况下,函数之外的代码是没有意义的--它什么时候运行呢?

35g0bw71

35g0bw712#

这可以被认为是C和Python之间的风格差异。然而,这也有很好的理由。在C和C中,有一个非常明确和具体的地方,你的代码从那里开始执行,那就是main()函数的开始(当然,这只是真相的近似,但我们现在可以忽略这一点。)实际上,一个C/C++程序以main()函数开始和结束,在我看来,当你想了解一个程序实际上做什么时,这个函数非常有帮助。将此与另一种选择进行对比;代码分散在整个文件中以及函数和诸如此类的东西之间。
即使是在一个组织良好的Python程序中,您也会将代码主体置于if __name__ == "__main__":之下,不是吗?
现在来看看一些更高级的东西。有一些方法可以让代码在main()函数被调用之前运行。下面是其中之一:

#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;
}

同样,所有全局变量和类的所有static成员的构造函数以及一些依赖于平台的东西都在main()之前运行。类似地,有一些方法可以让代码在main()完成之后运行。这些方法通常是main()开始之前构造的对象的析构函数,以及注册到atexit()函数的函数。

ilmyapht

ilmyapht3#

main()是程序的访问点,所以你想写的任何代码都需要有一个从那个点开始的执行顺序。
静态变量在main()执行之前初始化,因此您可以在此之前初始化任何所需的变量。
但是如果你想运行启动程序状态的代码,你应该在程序的开头就这样做,滥用静态变量,用一些构造函数。

相关问题