從前筆者曾經對以下的程式產生過疑惑:
{$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

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

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

最新文章

  1. JavaScript常见的五种数组去重的方式
  2. php排序算法
  3. [转载]JavaScript内存分析
  4. 前端筑基篇(一)->ajax跨域原理以及解决方案
  5. 用法总结:NSArray,NSSet,NSDictionary-备用
  6. C#调用进程
  7. leetcode Single Number python
  8. iOS 之 支付
  9. ActivityManager与Proxy模式的运用
  10. Json数组转换字符串、字符串转换原数组......
  11. 在利用node连接数据库遇到的问题
  12. SpringMVC 全局异常处理
  13. eclipse自定义快捷键(模板)
  14. Chrome网页性能分析工具
  15. Python的Matplotlib库简述
  16. JVM调优命令-jmap
  17. Baidu URL的部分参数
  18. JEECG中datagrid方法自定义查询条件
  19. org.hibernate.ObjectDeletedException: deleted object would be re-saved by cascade 解决方案 (网络转载)
  20. a[i]==i[a]==*(i+a)==*(a+i)

热门文章

  1. IFC and BFC
  2. Linux Oracle DB log 清理
  3. ubuntu 更换系统源和pip源
  4. ubuntu 开启PHP CURL支持
  5. (寒假集训)Mooo Moo (完全背包)
  6. [Usaco2010 Feb]Chocolate Buying
  7. localize by triangle note
  8. NMAP输出结果中CPE的含义
  9. POJ 2836 Rectangular Covering(状压DP)
  10. 我也来说说js的事件机制