gpt4 book ai didi

delphi - 为什么局部变量不能在声明时赋值而全局变量可以?

转载 作者:行者123 更新时间:2023-12-03 18:04:15 25 4
gpt4 key购买 nike

在 Delphi 中我们可以这样做:

 interface 
var
test: string = 'this is a test!'; { compiler accepts that }

但是我们不能这样做:

 implementation
procedure showTest;
var
internal_test1; { compiler accepts that }
internal_test2: string = 'another test'; { compiler error }

我希望 Embarcadero 的一些用户能回答这个问题。 :-)

最佳答案

全局变量的值是从编译时常量表达式分配的,并且它们存储在程序的数据段中。也就是说,这些变量的空间是在 EXE 文件中物理分配的,因此当操作系统加载程序时,这些变量是隐式加载的。编译器可以确保在运行时不执行任何代码就初始化这些变量。它只是将它们的初始值存储在 EXE 文件中。

另一方面,局部变量直到运行时才存在。 EXE 中没有物理空间总是引用这些变量。要初始化它们,编译器必须生成代码来为它们赋值。

全局变量可以被初始化,因为它在早期编译器中在技术上很容易实现,而且它在运行时本质上是一个免费功能,不需要 CPU 执行任何指令。 p>

如果你想初始化局部变量,你可以自己写代码;该代码可以完全执行任何编译器插入的代码将执行的操作。

关于delphi - 为什么局部变量不能在声明时赋值而全局变量可以?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17302413/

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