• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

Delphi里J+开关作用类似C语言的static变量

原作者: [db:作者] 来自: [db:来源] 收藏 邀请


從前筆者曾經對以下的程式產生過疑惑:
{$J+}
procedure TForm1.Button1Click(Sender: TObject);
const
  VarConst: integer = 4;
begin
  VarConst := 5;
  ShowMessage(IntToStr(VarConst));
end;
const
不是常數嗎為什麼可以改呢在先前的Pascal版本中
const VarName: DataType = const value;
定義的具型態常數的確是可以改的假如您希望常數就是常數它不應該允許修改
請將這個Compiler directive設為{$J-}
不論是{$J+}{$J-}, const VarName = const value; 定義的常數(
沒有加上型別宣告), 是一個真正的常數其他的程式不可以改變其內容。
其實{$J+}時還有一個妙用那就是宣告出類似C語言static的變數換句話說
產生了一個與Application相同生命週期的變數。在這種情形下變數只在第一
次使用時才會建立函數或程序結束時該變數也不會消滅下一次再呼叫到這個函數
或程序時我們仍然可以參考到上次執行結束時的值。讓我們試一下這個例子:
{$J+}
procedure TForm1.Button1Click(Sender: TObject);
const
  i: integer = 0;
begin
  ShowMessage(IntToStr(i));
  Inc(i);
  ShowMessage(IntToStr(i));
end;
第一次執行時我們分別會看到「0」「1再點一次這個按鈕時看到的將是「1」「2」。

 

在工程文件的最前面添加上
{$APPTYPE CONSOLE}

在代码中加上如下调试代码:
{$IFDEF CONSOLE}
  Writeln('=====');
{$ENDIF}
将会在控制台中输出信息。

-------------------------------------------------------

其实应该这样写(一旦完成定义,可立即关闭开关,不影响后面使用):

{$J+}
procedure TForm1.Button1Click(Sender: TObject);
const
i: integer = 0;
{$J-}
begin
ShowMessage(IntToStr(i));
Inc(i);
ShowMessage(IntToStr(i));
end;

 

摘自:

http://blog.csdn.net/henreash/article/details/3962975

-------------------------------------------------------

心得:编程的时候,这种用法对自动记住变量的上一次值十分有用,而不用程序员自己去另外定义一套变量并加以复制和管理了。真是不实际使不知道它的精妙。


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
MATLAB 求解最优化问题发布时间:2022-07-18
下一篇:
时间转换与星期推算(Matlab版)发布时间:2022-07-18
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap