Delphi的IDE環境設定

非常老帥發表於2011-01-11

A.1 使用編譯設定對話方塊

編譯器的編譯指令是用於指定編譯器對專案編譯過程的動作和行為。可以通過[Project]->[Options]->[Complier]選項頁進行設定,絕大部分的編譯環境都可以通過這一對話方塊進行調整,他包含了對程式碼、語法、除錯資訊等的設定。

1.程式碼設定(Code Generation)

Optimization: 程式碼優化開關

Aligned record fields: 字對齊資料。這個編譯指令能夠在變數和型別化常量的位元組對齊和字對齊之間進行切換,其作用是全域性的。

Stack frames: Windows 堆疊幀。其作用域是區域性的,他使編譯器成為遠端過程和函式生成特定的開頭和結尾程式碼。這個指令用於Windows 3.0的真實模式,對所有Delphi應用程式他應該是關閉的。

Pentium-safe FDIV: Pentium安全FDIV檢查。此指令能夠在Pentium處理器中指定編譯器是否建立能夠檢測和使用有缺陷的浮點除法指令的程式碼。

2.執行期錯誤(Runtime Errors)

Range Checking: 範圍檢查。這個指令的作用範圍是區域性的,用於控制範圍檢驗程式碼的生成。

I/O Checking: I/O檢查。這個指令的作用域為區域性,用來生成對一個檔案的輸入和輸出過程和呼叫結果進行檢查的程式碼。一般應該使其功能開啟。

Overflos Checking: 溢位檢查。其作用是生成對算術溢位檢查的程式碼。

3.語法設定(Syntax Optings)

Strict Var- strings: 靜態變數串開關。用來控制對以變數引數形式傳遞的串的型別檢查。

Comlete Boolean Eval: 完全布林表達量判定。用於執行強制的完整表示式判定。完全布林量判定,有可能導致系統崩潰,所以一般不使用他。

Extended Syntax: 擴充套件語法開關。他能允許或禁止Delphi的擴充套件語法。

Typed @ Operator: 型別化的@運算子檢查。應用於區域性的變數引用上,控制@運算子返回的指標值型別。

Open Parameters: 開放引數開關。用於控制使用String關鍵字宣告的變數引數。開放引數允許將大小不一的串變數傳遞到同一個過程或函式中,一般在彙編中會使用到。

Huge Strings: 字串型別開關。用於控制Ansistring和Shortstring型別的切換。當開啟時符合Ansistring,關閉時符合Shortstring。

Assignable Typed Constants: 可分配型別常量。用於向下與Delphi 1.0相容。

4.除錯(Debugging)

Debug Information: 除錯資訊開關。用於設定是否把除錯資訊寫入以編譯的單元檔案(.dcu)。

Local Symbols: 區域性符號開關。允許或禁止區域性符號資訊的建立。

Reference Info/Definitions Only: 符號資訊開關。用於允許或禁止由Delohi的物件瀏覽器使用的符號引用資訊的生成。

Assertions: 用於控制區域性程式碼的屬性。

Use Debug DCUs: 使用或禁止VCL的DCU檔案除錯。

5.資訊(Messages)

Show Hints: 顯示暗示。

Show Warnings: 顯示警告。

**********

A.2 使用編譯指令

除了使用編譯設定對話方塊對編譯器進行設定外,還可以通過編譯指令來對編譯器進行設定。
對於區域性的編譯器設定,只有使用編譯指令來完成。

對於開關編譯指令,通過在編譯指令後加入指示開關狀態的加號和減號來控制編譯器。例如:

{$B+} : 開啟完全布林量檢查。
{$Q-} : 關閉溢位檢查。

通常,編譯指令的作用域是在編譯指令後的程式碼部分,而對於全程的編譯指令應該防在單元介面部分的開頭。
編譯設定對話方塊的設定都有與之對應的編譯指令用於在程式碼中對編譯器進行設定,如下表所示。

設定項 編譯指令

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 : 這個編譯指令是最為常用的編譯指令,他是資原始檔編譯指令,用於指定連線到執行檔案和庫的資原始檔,例如在工程檔案(.dpr)中會有{$R *.RES} 的編譯指令,表明把字尾為 .RES的與工程檔案同名的資原始檔連線入執行檔案,也可以指定一個資原始檔,資原始檔的使用對於編寫Windows程式來說是很重要的基礎。

$I Filename :這個編譯指令功能類似於C語言的#Include , 用於指定編譯時包括的檔案。

{$O+}  最佳化開關

建議您維持 {$O+} 的系統預設值。開啟這個 Compiler directive, Delphi 會自動進行最佳化處理 ,  程式可以因此跑得快一些 ,  您可以放心的開啟這個編譯開關 , Delphi不會進行不安全的最佳化而使您的程式執行時發生錯誤。

{$Q-}  滿溢檢查 , {$R-}  範圍檢查

{$Q} 與 {$R} 是一組搭配使用的 Compiler directive,  它們將檢查數值或陣列的操作是否在安全的邊界中,{$Q}會檢查整數運算(如+, -, Abs, Sqr, Pred,

Succ等),而{$R}則檢查字串與陣列的存取是否超出合理邊界範圍等問題。 使用這兩個 Compiler directives 會因為這些檢查動作而降低程式執行的速度 ,通常我們會在除錯時開啟這兩個編譯開關。

{$U-} Pentium CPU 浮點運算安全檢查

還記得早期 Pentium CPU 浮點運算不正確的事吧 ?  這批 CPU 應該回收得差不多了 ,但如果您仍然不確定程式會不會意外的遇到漏網之魚或黑心牌經銷商的話 ,  請將這個Compiler directives 設為 {$U+} 。

根據 Borland 手冊的說明 ,  如果 CPU 是沒有暇疵的 ,  設定 {$U+} 對於執行速度只有輕微的影響 ;  但如果是問題 CPU,  浮點的除法速度會因此慢上三倍 ,  是否要開啟這個開關 ,您心中應該已有取捨。

 

 


相關文章