如何在Delphi中实现C语言中静态变量的功能

    技术2022-05-19  28

    如何在Delphi中实现C语言中静态变量的功能

    DELPHI编程 2007-09-02 14:56:01 阅读28 评论0   字号: 订阅

    如何在Delphi中实现C语言中静态变量的功能

     

    在函数(function)或过程(procedure)内定义的变量(variable)为局部变量,存放在栈(stack)内,当函数或过程结束时,里面所保存的内容都会随着栈的释放而消失。而在C语言中在定义局部变量时可以用static来定义静态变量,该变量在整个程序的运行中的值一直可以保留,可以为程序实现特殊的功能。但Delphi却没有这一功能,如果为实现这一功能用全局变量显然会破坏程序的封装性,是不可取的。其实这一功能在Delphi中也是可以通过const定义常量的方法来变通实现这一功能。常量本来是不允许在程序中进行修改的,如果想要修改它们的值,有以下两种方法可以实现:

    一、通过{$J}的开关来控制编译器是否允许程序修改常量

    根据Delphi的帮助文档描述:$J指令控制是否允许定义为常量的值是否允许被修改。在{$J+}状态,定义的常量可以被修改,常量在此时相当于一个可以被初始化数值的变量。在{$J-}状态定义的常量是真正的常量,任何尝试对常量的修改都会使编译器报错。具体示例如下:

    {$J+}procedure TForm1.Button1Click(Sender: TObject);const i:integer=100;begin  i:=i+100;  showmessage(inttostr(i));end;{$J-}

    需要说明的是,早期的DelphiPASCAL版本,常量都是可写的,相当于{$J+}状态,以前的源代码在使用可写常量需要重新编译时必须使用{$J+}进行编译。

    二、通过指针来实现此功能

    通常用Delphi来写程序很少会用到指针,其实Delphi的指针功能和C语言的指针功能一样的强大,此处不做过多讲述。如果想要修改常量的值的话,可以定义一个指针变量,使用指针指向此常量的地址,然后通过指针来修改常量。具体示例如下:

        procedure TForm1.Button1Click(Sender: TObject);const i:integer=100;  var p:PInteger;begin  p:=@i;  P^:=p^+100;  showmessage(inttostr(i));end;

    如果不是出于使用静态变量的目的,建议最好不要使用以上两种方法,更不要通过这种方法来改变全局常的值,那样会对程序带来灾难性的后果。必须使用的话,建议使用第一种方法,使用完后应尽快使用{$-}来关掉改写常量功能。

     

    原帖地址:http://hunto.blog.163.com/blog/static/147405269200782256158/


    最新回复(0)