Delphi 編譯指令的使用方法

2021-05-27 19:01:35 字數 3220 閱讀 1037

乙個程式從無到有的過程如下:

1.編譯指令原理介紹

一條編譯指令實際上是乙個標誌符(編譯器所能識別的標誌符),且有其固定的語法。編譯器根據不同的指令按不同的方式編譯程式。

編譯指令的開始字元是「 $「 ,它總是出現在 「」。 例如:

2.delphi編譯指令的使用範圍:

你可以將乙個編譯指令放在程式的任何位置,甚至可以嵌入到**行當中(在實參中可以使用@flatmenus

全域性編譯指令:  影響全部的編譯內容,它必須在放在程式和單元宣告之前。

區域性編譯指令:  僅影響區域性的編譯內容,它的影響範圍是,直至下乙個最近的編譯指令。它可以放在程式的任意位置。

開關編譯指令:  可以組合成乙個簡單的編譯指令組,中間用逗號分開,但不能有空格。例如:  //注意:不能有空格

delphi 預定義的條件識別符號都是全域性的,

自定義區域性的識別符號:用 自定義的識別符號都是區域性的.

自定義全域性的識別符號:project -> options... -> 選定 delphi compiler -> 點conditional defines 右邊小按鈕 -> 新增.

3.delphi編譯指令共有三種:

1>.開關編譯指令:有 on 、off 兩種轉換狀態;

2>.引數編譯指令:通過引數指定影響的的內容,引數可以為檔名或記憶體大小

3>.條件編譯指令: 指定如何編譯特定的區域段

注意:所有的編譯指令(除開關編譯指令外)在名字和引數之間至少應有乙個空格。

1>.開關編譯指令

開關編譯指令地特點是它有 on 、off 兩種轉換狀態。對於單字元版本,你可以在編譯指令後新增 "+"或「-」。

對於長字元版本,你可以在編譯指令後新增 「on」或「off」。

實際應用最多的是開關編譯; 在任一**頁執行快捷鍵 ctrl+o+o , 就會顯示所有的開關編譯指令在當前頁的最上面。

2>.引數編譯指令

引數編譯指令通過引數指定影響的的內容,引數可以為檔名或記憶體大小等。

$r filename :

這個編譯指令是最為常用的編譯指令,他是資源檔案編譯指令,用於指定連線到執行檔案和庫的資源檔案,

例如在工程檔案(.dpr)中會有的編譯指令,表明把字尾為 .res的與工程檔案同名的資源檔案連線入執行檔案,

也可以指定乙個資源檔案,資源檔案的使用對於編寫windows程式來說是很重要的基礎。

$i filename :

這個編譯指令功能類似於c語言的#include , 用於指定編譯時包括的檔案。

3>.條件編譯指令

條件編譯指令指定的條件如何編譯特定的區域段。也就是如果滿足某個條件,

則按照一種方式編譯,否則按另一種方式編譯。

條件編譯指令含義:

$define : 用於定義乙個條件符號,一旦定義,條件符號就為真

$ifdef :  對條件符號進行判斷,為真則編譯原始檔

$else:  與$ifdef配合使用,如果$ifdef條件為假,則只對原始檔$else後一小部分進行編譯

$ifndef:  對條件符號進行判斷,為假則編譯原始檔

$ifopt : 根據編譯開關狀態,對原始檔編譯

$undef : 撤消以前的條件符號定義

$endif : 結束乙個以$if開始的條件段

這些條件編譯指令是非常有用的。例如,可以通過開關的狀態來控制編譯:

注意:delphi 有個常識: 如果單元**沒有改變, 相應的 dcu 不會重新生成。所以使用編譯設定對話方塊設定一些指令,可能不

會引起dcu重新生成的,此時可以使用shirt+f9強制編譯,或者修改一下**(譬如在**中打個空格再退回來)。

所有的編譯指令(除開關編譯指令外)在名字和引數之間至少應有乙個空格。

例如:3.編譯指令的使用方法(高階編譯指令):

1>.什麼是預處理(編譯指令的作用)?

譬如 vcl 中有很多**是相容 linux 的, 在 windows 下就需要在編譯之前預處理掉那些 for linux 的**.例如:判斷作業系統: 其中的 "mswindows" 和 "linux" 就是 delphi 預定義的 "條件識別符號".

begin

showmessage('windows');

showmessage('linux');

end;

2>. $ifdef 等同於 $if defined(...) : 它們的結束分別是: $endif、$ifend; 例子中的 ver200 是 delphi 2009 的標識.

begin

showmessage('這是 delphi 2009');

showmessage('這是 delphi 2009');

end;

3>. $ifndef 等同於 $if not defined(...) : 它們的結束分別是: $endif、$ifend; 例子中的 ver150 是 delphi 7 的標識.

begin

showmessage('這不是 delphi 7');

showmessage('這不是 delphi 7');

end;

4>. 可以使用 or 和 and:

begin

showmessage('條件識別符號 aaa 和 bbb 其中乙個定義了');

showmessage('條件識別符號 aaa 和 bbb 都定義了');

end;

5>. 可以使用 system 單元裡的常量: 我測試了 system 單元裡的很多常量都沒問題.

begin

showmessage(floattostr(compilerversion));

showmessage('這是 delphi 2005 或以上的版本');

end;

6>. 使用 $ifopt 判斷編譯開關: delphi 挺好玩, 26個字母分別安排成不同的開關指令(用 ctrl+o+o 檢視, 當然開關指令不止這些);

$ifopt 可以判斷這些指令是否開啟.

這個指令不是很常用, 我看了一下 2009 的 vcl 原始碼, 總共才用了 6 次.

begin

showmessage('指令 b 已開啟');

showmessage('指令 b 已關閉');

showmessage('ok!');

end;

關於Delphi中預編譯指令的使用方法

在delphi中,也有與c相似的預編譯指令,雖然該類指令只在當前的單個檔案有效 也有可能是筆者未全面了解該類指令的真正用法 但是這一類指令對於進行多版本的製作工作 如從標準版中出學習版 確實有著相當不錯的用途。一 指令介紹 1 define指令 格式 說明 用於定義乙個在當前單元有效的符號 symb...

關於Delphi中預編譯指令的使用方法

在delphi中,也有與c相似的預編譯指令,雖然該類指令只在當前的單個檔案有效 也有可能是筆者未全面了解該類指令的真正用法 但是這一類指令對於進行多版本的製作工作 如從標準版中出學習版 確實有著相當不錯的用途。一 指令介紹 1 define指令 格式 說明 用於定義乙個在當前單元有效的符號 symb...

Delphi 的編譯指令

1.ifdef 等同於 if defined 它們的結束分別是 endif ifend 例子中的 ver200 是 delphi 2009 的標識.begin showmessage 這是 delphi 2009 showmessage 這是 delphi 2009 end 2.ifndef 等同於...