從前筆者曾經對以下的程式產生過疑惑: {$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
-------------------------------------------------------
心得:编程的时候,这种用法对自动记住变量的上一次值十分有用,而不用程序员自己去另外定义一套变量并加以复制和管理了。真是不实际使不知道它的精妙。
|
请发表评论