編譯指示器

pascal中有一種編譯指示器——編譯開關,在編譯視窗中連按兩下“ctrl+o”可以在程式頭中出現所有編譯開關情況,也可以自己書寫。

基本介紹

  • 中文名:編譯指示器
  • 自動:產生對調用過程的結果進行檢查
  • 產生:完全布爾表達式運算代碼
  • 定義:自動定位引起錯誤的語句
參數編譯指示,
編譯指示器(編譯開關)的使用
下面是一些常見指示器(開關)所代表的意思:
1)數據對齊(Align Data)
{$A+}或{$A-}
在{$A+}狀態下,將非字元按偶地址對齊存放,可以提高8086和80286存取數據的速度。不影響位元組變數、記錄域結構和數組元素。在{$A-}狀態下,將使用位元組對齊方式,數據可存放在奇地址或偶地址。
2)布爾運算(Boolean Evaluation)
{$B+}或{$B-}
在{$B+}狀態下,編譯器產生完全布爾表達式運算代碼。布爾表達式中的每個操作都確保被計算。既是整個表達式的結果以確定,還繼續運算其餘的表達式。
在{$B-}狀態下,編譯器產生短路布爾表達式運算代碼。接著從左到右運算,當整個表達式結果確定後,就停止運算。
3)調試信息(Debug Information)
{$D+}或{$D-}
{$D+}產生調試信息,它在編譯程式或單元產生運行錯誤時,能自動定位引起錯誤的語句。
4)浮點仿真(Emulation)
{$E+}或{$E-}
{$E+}只是在8087協處理器不存在時,將連線運行庫以便對協處理器進行仿真。
{$N+,$E+}狀態編譯程式,系統將同8087仿真器連線,得到exe檔案,不管有無8087,都可以在機器上進行IEEE標準754的二進制浮點運算
{$N+,$E-}狀態下,只能在有8087時,才能進行IEEE標準754的二進制浮點運算
8087仿真開關如果用在一個單元是無效的,它只能用於程式的編譯
5)輸入輸出檢查(Input/Output Checking)
{$I+}或{$I-}
$I指示控制是否自動產生對調用過程的結果進行檢查。
6)數字處理(Numberic Processing)
{$N+}或{$N-}
{$N-}狀態,在機器上只能進行實數類型運算。在{$N+}狀態,在有8087協處理器或沒有用{$E+}指示對8087進行仿真,都可以對IEEE浮點類型進行運算。
7)範圍檢查(Range Checking)
{$R+}或{$R-}
$R+進行邊界和範圍檢查
8)棧溢出檢查(Stack Overflow Checking)
{$S+}或{$S-}
在{$S+}狀態下編譯,程式在每個過程或函式的開始生成一段代碼,用於檢查是否有足夠的棧空間供局部變數使用。若棧空間不夠,程式停止運行,並顯示運行錯誤。
在{$S+}狀態下這樣調用會導致系統崩潰。
9)變數串檢查(Var String Checking)
{$V+}或{$V-}
在{$V+}狀態下,實行嚴格的類型檢查,要求形參實參具有同一字元串類型。
在{$V+}狀態下,允許任意類型的字元串變數作為實參,甚至是一實參的最大長度不同於形參長度。BP7下的最佳參數是:
{$A+,B-,D-,E-,F-,G+,I-,L-,N+,O-,P+,Q-,R-,S-,T-,V-,X+,Y-}
{$M 65520,0,655360}
其中D和L與調試有關,調試時必須打開這兩個參數
N+可以使程式能夠使用擴展實型。一般情況下,Real速度最慢,不應該使用。
在編輯環境下按Ctrl+O+O,可以自動列出默認的編譯指示,然後再自己改。

參數編譯指示

符號 預設值或格式 類型 功能
M M 16384 0 655360 全程 動態記憶體分配 實模式 規定棧尺寸,堆最小尺寸,堆最大尺寸
O O單元名 局部 覆蓋單元開關(此單元必須是用編譯
示的{$O+}狀態編譯的單元
編譯開關指示:
符號 類型 具體含義
A: 全程 按地址對齊
默認和最佳化:A+ 所有大於一安茸的變數或類型常數均從偶地址開始存放
A- 變數或類型常數均簡單地放在下一可用地址
B: 全程 布爾計值控制
默認: B+ 執行完全布爾值計值運算
最佳化: B- 執行短路布爾值計算
D: 全程 調試信息開關
默認: D+ 將調試信息保存在一個行號表中,當運行出錯時指示出錯處
最佳化: D- 不產生調試信息行號
E 全程 浮點運算仿真
默認: E+ 不出現8087數字協處理器時,運算允許用運行庫仿真
最佳化: E- 必須有8087數字協處理器才能進行浮點運算
F 局部 強制遠程調用
F+ 對子程式總是遠程調用
默認和最佳化: F- 由PASCAL 自動選擇對子程式的調用方式
I 局部 I/O出錯檢查
默認: I+ 系統執行I/O出錯檢查
最佳化: I- 系統不執行I/0齣錯檢查
L 全程 局部符號開關
默認:L+ 產生某一模組的局部符號信息,使IDE可檢查和修改模組的局部變數。
最佳化:L- 不產生某一模組的符號信息
N 全程 數字協處理器
默認: N- 不使用數字協處理器,實型數運算以軟體實現
最佳化: N+ 使用數字協處理器,以硬體實現各類實型運算
O 全程 產生覆蓋代碼
默認和最佳化: O- 不產生覆蓋代碼
O+ 控制產生覆蓋代碼,經常與高度遠程調用編譯指示{$F+}連用
P 全程 不定長字串參數
默認: P- 不使用不定長字元串參數
最佳化: P+ STRING類型的字元串實參不預先確定其最大長度,調用子程式時自動設計為與實際參數一致。
Q 全程 整數溢出檢查
默認和最佳化: Q- 整數運算不檢查溢出錯誤
Q+ 檢查溢出錯誤
R 局部 下標範圍檢查
默認和最佳化: R- 不執行上述檢查
R+ 對運算時所有數組和字元串的下標表達式檢查其值是否越界,並對變數和子界的測試值檢查是否在指定的範圍內
S 局部 棧空間域檢查
默認: S+ 在每次子程式調用前檢查是否有足夠的調用空間
最佳化: S- 不執行上述檢查
T 局部 指針類型檢查
默認和最佳化: T- @操作返回結果類型為無類型指針
T+ @操作返回結果為類型指針
常用參數編譯指示表:
字母
預設值或格式
類型
實模式
保護模式
Windows
功能
具體含義
D
D 正文
全程








把所描述的正文插入到.exe或.dll檔案的標題中,不在單元中使用。
I
I 檔案名稱
局部









把源檔案代碼包含進所在程式一起編譯。包含檔案可以嵌套。
L
L 檔案名稱
局部









指示編譯器連結一個已編譯的程式或單元的目標檔案.obj。
M
實模式
全程









實模式
M 16384,0,655360
規定棧尺寸、堆最小尺寸、堆最大尺寸。
保護模式
保護模式
M 16384
規定棧尺寸。
Windows模式
Windows模式
M 8192,8192
規定棧尺寸、堆尺寸。
O
O 單元名
局部







把所指單元變成一覆蓋單元。此單元必須是用編譯指示{$O+}狀態編譯的單元。
R
R 檔案名稱
局部








指定插入到應用程式或庫檔案的Windows資源檔案。

相關詞條

熱門詞條

聯絡我們