乙個程式從無到有的過程如下:
1.編譯指令原理介紹
一條編譯指令實際上是乙個標誌符(編譯器所能識別的標誌符),且有其固定的語法。編譯器根據不同的指令按不同的方式編譯程式。2.delphi編譯指令的使用範圍:編譯指令的開始字元是「 $「 ,它總是出現在 「」。 例如:
你可以將乙個編譯指令放在程式的任何位置,甚至可以嵌入到**行當中(在實參中可以使用@flatmenus全域性編譯指令: 影響全部的編譯內容,它必須在放在程式和單元宣告之前。
區域性編譯指令: 僅影響區域性的編譯內容,它的影響範圍是,直至下乙個最近的編譯指令。它可以放在程式的任意位置。
開關編譯指令: 可以組合成乙個簡單的編譯指令組,中間用逗號分開,但不能有空格。例如: //注意:不能有空格
delphi 預定義的條件識別符號都是全域性的,3.delphi編譯指令共有三種:自定義區域性的識別符號:用 自定義的識別符號都是區域性的.
自定義全域性的識別符號:project -> options... -> 選定 delphi compiler -> 點conditional defines 右邊小按鈕 -> 新增.
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 等同於...