在Delphi中我们可以这样做:
interface
var
test: string = 'this is a test!'; { compiler accepts that }
Run Code Online (Sandbox Code Playgroud)
但我们不能这样做:
implementation
procedure showTest;
var
internal_test1; { compiler accepts that }
internal_test2: string = 'another test'; { compiler error }
Run Code Online (Sandbox Code Playgroud)
我希望Embarcadero的一些用户可以回答这个问题.:-)
全局变量的值是从编译时常量表达式赋值的,它们存储在程序的数据段中.也就是说,这些变量的空间是在EXE文件中物理分配的,因此当OS加载程序时,这些变量会被隐式加载.编译器可以确保初始化这些变量,而无需在运行时执行任何代码.它只是将它们的初始值存储在EXE文件中.
另一方面,局部变量在运行时才存在.EXE中没有物理空间总是引用这些变量.要初始化它们,编译器必须生成代码以为它们赋值.
全局变量可以初始化,因为它在早期的编译器中实现技术上很容易,并且它在运行时本质上是一个免费的功能,不需要CPU执行任何指令.
如果要初始化局部变量,可以自己编写代码; 该代码可以完全执行任何插入编译器的代码.
| 归档时间: |
|
| 查看次数: |
1063 次 |
| 最近记录: |