gpt4 book ai didi

c++ - C++ 可以在全局范围内拥有代码吗?

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:54:53 28 4
gpt4 key购买 nike

拥有代码(在 C++ 源文件的全局范围内编译为汇编指令)是否合法?以前,我的印象是除了 Ch programming language(C/C++ 的解释器),你不能在 C++ 程序的全局范围内有代码。代码/指令只能在函数体内 [period]!

但是,我发现您可以通过将函数分配给全局变量来在 C++ 的 main 函数之前调用函数!这将涉及汇编代码中的 call 指令。您还可以将两个变量的总和分配给汇编代码之外的另一个全局变量。这几乎肯定会涉及 addmov 指令。如果该代码在全局范围内,在任何函数之外,它什么时候执行?如果 + 是类类型的重载运算符,如果它内部有一个 print 语句,那么它什么时候执行?

您还可以在 C++ 程序的全局范围内使用循环和控制结构吗?如果可以,它们何时执行?对于其他程序构造,它们是否允许在全局范围内使用,以及在什么情况下以及何时执行?

这个问题是对我之前发布的一个问题的回应: Why can't I assign values to global variables outside a function in C?

原始问题的回答者断言您不能在函数范围之外拥有代码。我认为我不完全理解这方面的规则,以及究竟什么被认为是“代码”或不是。

int foo() {
cout << "Inside foo()" << endl;
return 5;
}

// is this not code?
int global_variable = foo();

// How does this statement work without generating code?
int a = 4;
int b = 5;
int c = a + b;

int main() {
// The program behaves as if the statements above were executed from
// top to bottom before entering the main() function.
cout << "Inside main()" << endl;
cout << "int c = " << c << endl;
return 0;
}

最佳答案

您链接到的问题的答案是以简单的方式进行讨论,而不是对结构使用严格的 C++ 命名。

比较迂腐,C++没有“代码”。 C++ 具有声明、定义和语句。语句就是您可能认为的“代码”:iffor、表达式等。

只有声明和定义可以出现在全局范围内。当然,定义可以包括 表达式。 int a = 5; 定义一个全局变量,由表达式初始化。

但是您不能在全局范围内只使用随机语句/表达式,例如 a = 5;。也就是说,表达式可以是定义的一部分,但表达式不是定义。

当然你可以在 main 之前调用函数。过于复杂而无法在编译时执行的全局变量构造函数和初始化程序必须在 main 之前运行。例如:

int b = []()
{
std::cout << "Enter a number.\n";
int temp;
std::cin >> temp;
return temp;
}();

编译器不能在编译时这样做;它是互动的。并且 C++ 要求所有全局变量在 main 开始之前初始化。因此编译器将不得不调用 pre-main 代码。这是完全合法的。

每个 C++ 编译和执行系统都有一些机制来调用之前和之后的代码main。必须初始化全局变量,并且可能需要调用对象构造函数来进行初始化。 main 完成后,必须销毁全局变量,这意味着需要调用析构函数。

关于c++ - C++ 可以在全局范围内拥有代码吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51886189/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com