| 9.3 條件編譯 條件編譯是指在編譯一個源程序文件時,其中部分代碼段能根據條件成立與否有選擇地被編譯。即編譯程序只編譯沒有條件或條件成立的代碼段,而不編譯不滿足條件的代碼段。 條件編譯為組裝與環境有關的大程序提供有力的支持,能提高程序的可移植性和可維護性。通常在研制程序系統時,設計者將所有與環境有關的內容編寫成獨立的程序段,并將它們配上相應的條件編譯命令。因環境不同等原因,只要設定相應條件,就能組裝出適應環境要求的新程序。 條件編譯命令主要有三種相似的形式。 (1) #if 表達式 程序段1 # else 程序段2 # endif 其中表達式為常量表達式,其意義是當指定的表達式值為非零時,程序段1參與編譯,程序段2不參與編譯;否則,反之。 這種形式的條件編譯命令使預處理程序能根據給定的條件確定哪個程序段參與編譯,哪個程序段不參與編譯。 在上述一般形式中,當程序段2不出現時,也可簡寫為 #if 表達式 程序段 # endif 條件編譯與if語句有重要區別:條件編譯是在預處理時判定的,不產生判定代碼,其中一個不滿足條件的程序段不參與編譯,不會產生代碼;且語句是在運行時判定的,且編譯產生判 定代碼和兩個分支程序段的代碼。因此,條件編譯可減少目標程序長度,能提高程序執行速度。但條件編譯只能測試常值或常量表達式,而且語句能對表達式作動態測試。 條件編譯預處理命令也可呈嵌套結構。特別是為了便于描述# else后的程序段又是條件編譯情況,引人須處理命令符# elif.它的意思就是# else #if.所以條件編譯須處理命令更一般的形式為 # if 表達式 1 程序段1 # elif 表達式 2 程序段2 # elif 表達式 n 程序段n # else 程序段 n+l # endif (2) # ifdef 標識符 程序段1 # else 程序段2 # endif 其中標識符是一個宏名,上述意義是當宏名已被定義,則程序段里參與編譯,程序段2不參與編譯;否則,反之。這里的程序段可以是任何C代碼行,也可以包含預處理命令行。其中的標識符只要求已定義與否,與標識符被定義成什么是無關的。如標識符只用于這個目的,常用以下形式的宏定義來定義這類標識符: # define 標識符 即標識符之后為空,直接以換行結束該宏定義命令。 在上述一般形式中,如果程序段2為空,則可簡寫成如下一般形式: # ifdef 標識符 程序段 # endif 條件編譯主要作用是能提高程序的通用性,應用于不同的計算機系統編譯不同的源程序段。條件編譯另一種應用是在程序中插入調試狀態下輸出中間結果的代碼。如: # ifdef DEBUG printf(“a=%d, b=%d \n”, a, b); # endif 程序在調試狀態下與包含宏定義命令 # define BEBUG 的頭文件一起編譯;在要獲得最終目標程序時,不與包含該宏定義命令的頭文件一起編譯。這樣,在調試通過后,不必再修改程序,已獲得了正確的最終程序。為了日后程序維護,將調試時使用的程序代碼留在源程序中是專業程序員習慣采用的方法。因為這些代碼的存在不影響最終目標碼,但有助于日后修改程序時的調試需要。 (3) # ifndef 標識符 程序段1 # else 程序段2 # endif |
| 熱門資料下載: |
| < |
| 自考最新熱貼: |
【責任編輯:育路編輯 糾錯】 |
|
閱讀上一篇:高級語言程序設計知識點總結七 |
|
閱讀下一篇:高級語言程序設計課程考前串講講義二 |
|
|
| 【育路網版權與免責聲明】 | |
| ① 凡本網注明稿件來源為"原創"的所有文字、圖片和音視頻稿件,版權均屬本網所有。任何媒體、網站或個人轉載、鏈接、轉貼或以其他方式復制發表時必須注明"稿件來源:育路網",違者本網將依法追究責任; | |
| ② 本網部分稿件來源于網絡,任何單位或個人認為育路網發布的內容可能涉嫌侵犯其合法權益,應該及時向育路網書面反饋,并提供身份證明、權屬證明及詳細侵權情況證明,育路網在收到上述法律文件后,將會盡快移除被控侵權內容。 | |
熱點專題 |