zoukankan      html  css  js  c++  java
  • Delphi里J+开关作用类似C语言的static变量


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

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

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

  • 相关阅读:
    request:getParameter和getAttribute区别
    JSP登录页面大小
    单例模式详情
    关于HTML的总结
    遍历HashMap的四种方法
    三层开发原则
    java日期
    oracle6
    tomcat
    Linux命令
  • 原文地址:https://www.cnblogs.com/findumars/p/3651097.html
Copyright © 2011-2022 走看看