Delphi编译指令说明
生活随笔
收集整理的這篇文章主要介紹了
Delphi编译指令说明
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
Delphi快速高小的編譯器主要來自O(shè)bject PASCAL的嚴(yán)謹(jǐn),使用Delphi隨時(shí)都在與編譯器交流,大部分情況下不需要干涉編譯器的運(yùn)行,但是有時(shí)也需要對編譯器進(jìn)行必要的設(shè)置。
**********************************************************************************************
A.1 使用編譯設(shè)置對話框
編譯器的編譯指令是用于指定編譯器對項(xiàng)目編譯過程的動(dòng)作和行為。可以通過[Project]->[Options]->[Complier]選項(xiàng)頁進(jìn)行設(shè)置,絕大部分的編譯環(huán)境都可以通過這一對話框進(jìn)行調(diào)整,他包含了對代碼、語法、調(diào)試信息等的設(shè)置。
1.代碼設(shè)置(Code Generation)
Optimization: 代碼優(yōu)化開關(guān)
Aligned record fields: 字對齊數(shù)據(jù)。這個(gè)編譯指令能夠在變量和類型化常量的字節(jié)對齊和字對齊之間進(jìn)行切換,其作用是全局的。
Stack frames: Windows 堆棧幀。其作用域是局部的,他使編譯器成為遠(yuǎn)端過程和函數(shù)生成特定的開頭和結(jié)尾代碼。這個(gè)指令用于Windows 3.0的實(shí)模式,對所有Delphi應(yīng)用程序他應(yīng)該是關(guān)閉的。
Pentium-safe FDIV: Pentium安全FDIV檢查。此指令能夠在Pentium處理器中指定編譯器是否創(chuàng)建能夠檢測和使用有缺陷的浮點(diǎn)除法指令的代碼。
2.運(yùn)行期錯(cuò)誤(Runtime Errors)
Range Checking: 范圍檢查。這個(gè)指令的作用范圍是局部的,用于控制范圍檢驗(yàn)代碼的生成。
I/O Checking: I/O檢查。這個(gè)指令的作用域?yàn)榫植?#xff0c;用來生成對一個(gè)文件的輸入和輸出過程和調(diào)用結(jié)果進(jìn)行檢查的代碼。一般應(yīng)該使其功能打開。
Overflos Checking: 溢出檢查。其作用是生成對算術(shù)溢出檢查的代碼。
3.語法設(shè)置(Syntax Optings)
Strict Var- strings: 靜態(tài)變量串開關(guān)。用來控制對以變量參數(shù)形式傳遞的串的類型檢查。
Comlete Boolean Eval: 完全布爾表達(dá)量判定。用于執(zhí)行強(qiáng)制的完整表達(dá)式判定。完全布爾量判定,有可能導(dǎo)致系統(tǒng)崩潰,所以一般不使用他。
Extended Syntax: 擴(kuò)展語法開關(guān)。他能允許或禁止Delphi的擴(kuò)展語法。
Typed @ Operator: 類型化的@運(yùn)算符檢查。應(yīng)用于局部的變量引用上,控制@運(yùn)算符返回的指針值類型。
Open Parameters: 開放參數(shù)開關(guān)。用于控制使用String關(guān)鍵字聲明的變量參數(shù)。開放參數(shù)允許將大小不一的串變量傳遞到同一個(gè)過程或函數(shù)中,一般在匯編中會(huì)使用到。
Huge Strings: 字符串類型開關(guān)。用于控制Ansistring和Shortstring類型的切換。當(dāng)打開時(shí)符合Ansistring,關(guān)閉時(shí)符合Shortstring。
Assignable Typed Constants: 可分配類型常量。用于向下與Delphi 1.0兼容。
4.調(diào)試(Debugging)
Debug Information: 調(diào)試信息開關(guān)。用于設(shè)置是否把調(diào)試信息寫入以編譯的單元文件(.dcu)。
Local Symbols: 局部符號開關(guān)。允許或禁止局部符號信息的創(chuàng)建。
Reference Info/Definitions Only: 符號信息開關(guān)。用于允許或禁止由Delohi的對象瀏覽器使用的符號引用信息的生成。
Assertions: 用于控制局部代碼的屬性。
Use Debug DCUs: 使用或禁止VCL的DCU文件調(diào)試。
5.信息(Messages)
Show Hints: 顯示暗示。
Show Warnings: 顯示警告。
**********************************************************************************************
A.2 使用編譯指令
除了使用編譯設(shè)置對話框?qū)幾g器進(jìn)行設(shè)置外,還可以通過編譯指令來對編譯器進(jìn)行設(shè)置。
對于局部的編譯器設(shè)置,只有使用編譯指令來完成。
對于開關(guān)編譯指令,通過在編譯指令后加入指示開關(guān)狀態(tài)的加號和減號來控制編譯器。例如:
{$B+} : 打開完全布爾量檢查。
{$Q-} : 關(guān)閉溢出檢查。
通常,編譯指令的作用域是在編譯指令后的代碼部分,而對于全程的編譯指令應(yīng)該防在單元接口部分的開頭。
編譯設(shè)置對話框的設(shè)置都有與之對應(yīng)的編譯指令用于在代碼中對編譯器進(jìn)行設(shè)置,如下表所示。
設(shè)置項(xiàng) 編譯指令
Optimizations {$O}
Aligned record fields {$A}
Stack frames {$W}
Pentium-safe FDIV {$U}
Range Checking {$R}
I/O Checking {$I}
Overflow Checking {$Q}
Strict Var-strings {$V}
Comlete Boolean Eval {$B}
Extended Syntax {$X}
Typed @ Operator {$T}
Open Parameters {$P}
Huge Strings {$H}
Assertions typed constants {$J}
Debug information {$D}
Local sysnbols {$L}
在這些編譯指令以外還有一些非常有用的編譯指令。
$R Filename : 這個(gè)編譯指令是最為常用的編譯指令,他是資源文件編譯指令,用于指定連接到執(zhí)行文件和庫的資源文件,例如在工程文件(.dpr)中會(huì)有{$R *.RES}的編譯指令,表明把后綴為 .RES的與工程文件同名的資源文件連接入執(zhí)行文件,也可以指定一個(gè)資源文件,資源文件的使用對于編寫Windows程序來說是很重要的基礎(chǔ)。
$I Filename :這個(gè)編譯指令功能類似于C語言的#Include , 用于指定編譯時(shí)包括的文件。
**********************************************************************************************
A.3 使用條件編譯指令
條件編譯指令是非常重要的編譯指令,他控制著在不同條件下(例如,不同的操作系統(tǒng))產(chǎn)生不同的代碼。條件編譯指令是包含在
注釋括號之內(nèi)的,如下表所示。
條件編譯指令 含義
$DEFINE 用于定義一個(gè)條件符號,一旦定義,條件符號就為真
$ELSE 與$IFDEF配合使用,如果$IFDEF條件為假,則只對源文件$ELSE后一小部分進(jìn)行編譯
$ENDIF 結(jié)束一個(gè)以$IF開始的條件段
$IFDEF 對條件符號進(jìn)行判斷,為真則編譯源文件
$IFNDEF 對條件符號進(jìn)行判斷,為假則編譯源文件
$IFOPT 根據(jù)編譯開關(guān)狀態(tài),對源文件編譯
$UNDEF 撤消以前的條件符號定義
這些條件編譯指令是非常有用的。例如,可以通過開關(guān)的狀態(tài)來控制編譯:
{IFOPT R+}
showmessage('Compiled with range-checking');
{$ENDIF}
也可以通過定義條件符號來控制編譯:
{$Define s}
……
{$ifdef s}
showmessage('yes');
{$else}
showmessage('no');
{$endif}
他的編譯結(jié)果是顯示'yes',但是如果省去{$Define s}則顯示'no'。
在Delphi中已經(jīng)預(yù)定義了一些關(guān)鍵的條件符號,如下表所示。
條件符號 含義
VERxx 編譯器版本,XX表示版本,例如:Delphi 1.0 的編譯器版本為80、Delphi 5.0 的編譯器版本為130
WIN32 是否WIN32的運(yùn)行環(huán)境(Windows 95.98/NT/2000)
CPU386 是否Intel386以上的處理器
CONSOLE 是否控制臺(tái)程序
Delphi的編譯器指令除了以上的指令外還有一些,不過最為常用的指令已經(jīng)全部介紹完了。對于普通的程序,Delphi是不需要編程者去添加編譯器指令的,Delphi已經(jīng)自動(dòng)完成,但是要得到高品質(zhì)的應(yīng)用程序或者有特殊的要求的程序就必須熟悉Delphi的編譯指令。Delphi不僅有最快的編譯器而且編譯器的功能也非常強(qiáng)大。
**********************************************************************************************
A.1 使用編譯設(shè)置對話框
編譯器的編譯指令是用于指定編譯器對項(xiàng)目編譯過程的動(dòng)作和行為。可以通過[Project]->[Options]->[Complier]選項(xiàng)頁進(jìn)行設(shè)置,絕大部分的編譯環(huán)境都可以通過這一對話框進(jìn)行調(diào)整,他包含了對代碼、語法、調(diào)試信息等的設(shè)置。
1.代碼設(shè)置(Code Generation)
Optimization: 代碼優(yōu)化開關(guān)
Aligned record fields: 字對齊數(shù)據(jù)。這個(gè)編譯指令能夠在變量和類型化常量的字節(jié)對齊和字對齊之間進(jìn)行切換,其作用是全局的。
Stack frames: Windows 堆棧幀。其作用域是局部的,他使編譯器成為遠(yuǎn)端過程和函數(shù)生成特定的開頭和結(jié)尾代碼。這個(gè)指令用于Windows 3.0的實(shí)模式,對所有Delphi應(yīng)用程序他應(yīng)該是關(guān)閉的。
Pentium-safe FDIV: Pentium安全FDIV檢查。此指令能夠在Pentium處理器中指定編譯器是否創(chuàng)建能夠檢測和使用有缺陷的浮點(diǎn)除法指令的代碼。
2.運(yùn)行期錯(cuò)誤(Runtime Errors)
Range Checking: 范圍檢查。這個(gè)指令的作用范圍是局部的,用于控制范圍檢驗(yàn)代碼的生成。
I/O Checking: I/O檢查。這個(gè)指令的作用域?yàn)榫植?#xff0c;用來生成對一個(gè)文件的輸入和輸出過程和調(diào)用結(jié)果進(jìn)行檢查的代碼。一般應(yīng)該使其功能打開。
Overflos Checking: 溢出檢查。其作用是生成對算術(shù)溢出檢查的代碼。
3.語法設(shè)置(Syntax Optings)
Strict Var- strings: 靜態(tài)變量串開關(guān)。用來控制對以變量參數(shù)形式傳遞的串的類型檢查。
Comlete Boolean Eval: 完全布爾表達(dá)量判定。用于執(zhí)行強(qiáng)制的完整表達(dá)式判定。完全布爾量判定,有可能導(dǎo)致系統(tǒng)崩潰,所以一般不使用他。
Extended Syntax: 擴(kuò)展語法開關(guān)。他能允許或禁止Delphi的擴(kuò)展語法。
Typed @ Operator: 類型化的@運(yùn)算符檢查。應(yīng)用于局部的變量引用上,控制@運(yùn)算符返回的指針值類型。
Open Parameters: 開放參數(shù)開關(guān)。用于控制使用String關(guān)鍵字聲明的變量參數(shù)。開放參數(shù)允許將大小不一的串變量傳遞到同一個(gè)過程或函數(shù)中,一般在匯編中會(huì)使用到。
Huge Strings: 字符串類型開關(guān)。用于控制Ansistring和Shortstring類型的切換。當(dāng)打開時(shí)符合Ansistring,關(guān)閉時(shí)符合Shortstring。
Assignable Typed Constants: 可分配類型常量。用于向下與Delphi 1.0兼容。
4.調(diào)試(Debugging)
Debug Information: 調(diào)試信息開關(guān)。用于設(shè)置是否把調(diào)試信息寫入以編譯的單元文件(.dcu)。
Local Symbols: 局部符號開關(guān)。允許或禁止局部符號信息的創(chuàng)建。
Reference Info/Definitions Only: 符號信息開關(guān)。用于允許或禁止由Delohi的對象瀏覽器使用的符號引用信息的生成。
Assertions: 用于控制局部代碼的屬性。
Use Debug DCUs: 使用或禁止VCL的DCU文件調(diào)試。
5.信息(Messages)
Show Hints: 顯示暗示。
Show Warnings: 顯示警告。
**********************************************************************************************
A.2 使用編譯指令
除了使用編譯設(shè)置對話框?qū)幾g器進(jìn)行設(shè)置外,還可以通過編譯指令來對編譯器進(jìn)行設(shè)置。
對于局部的編譯器設(shè)置,只有使用編譯指令來完成。
對于開關(guān)編譯指令,通過在編譯指令后加入指示開關(guān)狀態(tài)的加號和減號來控制編譯器。例如:
{$B+} : 打開完全布爾量檢查。
{$Q-} : 關(guān)閉溢出檢查。
通常,編譯指令的作用域是在編譯指令后的代碼部分,而對于全程的編譯指令應(yīng)該防在單元接口部分的開頭。
編譯設(shè)置對話框的設(shè)置都有與之對應(yīng)的編譯指令用于在代碼中對編譯器進(jìn)行設(shè)置,如下表所示。
設(shè)置項(xiàng) 編譯指令
Optimizations {$O}
Aligned record fields {$A}
Stack frames {$W}
Pentium-safe FDIV {$U}
Range Checking {$R}
I/O Checking {$I}
Overflow Checking {$Q}
Strict Var-strings {$V}
Comlete Boolean Eval {$B}
Extended Syntax {$X}
Typed @ Operator {$T}
Open Parameters {$P}
Huge Strings {$H}
Assertions typed constants {$J}
Debug information {$D}
Local sysnbols {$L}
在這些編譯指令以外還有一些非常有用的編譯指令。
$R Filename : 這個(gè)編譯指令是最為常用的編譯指令,他是資源文件編譯指令,用于指定連接到執(zhí)行文件和庫的資源文件,例如在工程文件(.dpr)中會(huì)有{$R *.RES}的編譯指令,表明把后綴為 .RES的與工程文件同名的資源文件連接入執(zhí)行文件,也可以指定一個(gè)資源文件,資源文件的使用對于編寫Windows程序來說是很重要的基礎(chǔ)。
$I Filename :這個(gè)編譯指令功能類似于C語言的#Include , 用于指定編譯時(shí)包括的文件。
**********************************************************************************************
A.3 使用條件編譯指令
條件編譯指令是非常重要的編譯指令,他控制著在不同條件下(例如,不同的操作系統(tǒng))產(chǎn)生不同的代碼。條件編譯指令是包含在
注釋括號之內(nèi)的,如下表所示。
條件編譯指令 含義
$DEFINE 用于定義一個(gè)條件符號,一旦定義,條件符號就為真
$ELSE 與$IFDEF配合使用,如果$IFDEF條件為假,則只對源文件$ELSE后一小部分進(jìn)行編譯
$ENDIF 結(jié)束一個(gè)以$IF開始的條件段
$IFDEF 對條件符號進(jìn)行判斷,為真則編譯源文件
$IFNDEF 對條件符號進(jìn)行判斷,為假則編譯源文件
$IFOPT 根據(jù)編譯開關(guān)狀態(tài),對源文件編譯
$UNDEF 撤消以前的條件符號定義
這些條件編譯指令是非常有用的。例如,可以通過開關(guān)的狀態(tài)來控制編譯:
{IFOPT R+}
showmessage('Compiled with range-checking');
{$ENDIF}
也可以通過定義條件符號來控制編譯:
{$Define s}
……
{$ifdef s}
showmessage('yes');
{$else}
showmessage('no');
{$endif}
他的編譯結(jié)果是顯示'yes',但是如果省去{$Define s}則顯示'no'。
在Delphi中已經(jīng)預(yù)定義了一些關(guān)鍵的條件符號,如下表所示。
條件符號 含義
VERxx 編譯器版本,XX表示版本,例如:Delphi 1.0 的編譯器版本為80、Delphi 5.0 的編譯器版本為130
WIN32 是否WIN32的運(yùn)行環(huán)境(Windows 95.98/NT/2000)
CPU386 是否Intel386以上的處理器
CONSOLE 是否控制臺(tái)程序
Delphi的編譯器指令除了以上的指令外還有一些,不過最為常用的指令已經(jīng)全部介紹完了。對于普通的程序,Delphi是不需要編程者去添加編譯器指令的,Delphi已經(jīng)自動(dòng)完成,但是要得到高品質(zhì)的應(yīng)用程序或者有特殊的要求的程序就必須熟悉Delphi的編譯指令。Delphi不僅有最快的編譯器而且編譯器的功能也非常強(qiáng)大。
轉(zhuǎn)載于:https://www.cnblogs.com/iinsnian/archive/2008/06/06/1214828.html
總結(jié)
以上是生活随笔為你收集整理的Delphi编译指令说明的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: .NET访问PI数据库
- 下一篇: t-sql导出EXCEL语句