9.3 條件編譯 條件編譯是指在編譯一個(gè)源程序文件時(shí),其中部分代碼段能根據(jù)條件成立與否有選擇地被編譯。即編譯程序只編譯沒(méi)有條件或條件成立的代碼段,而不編譯不滿足條件的代碼段。 條件編譯為組裝與環(huán)境有關(guān)的大程序提供有力的支持,能提高程序的可移植性和可維護(hù)性。通常在研制程序系統(tǒng)時(shí),設(shè)計(jì)者將所有與環(huán)境有關(guān)的內(nèi)容編寫(xiě)成獨(dú)立的程序段,并將它們配上相應(yīng)的條件編譯命令。因環(huán)境不同等原因,只要設(shè)定相應(yīng)條件,就能組裝出適應(yīng)環(huán)境要求的新程序。 條件編譯命令主要有三種相似的形式。 �。�1) #if 表達(dá)式 程序段1 # else 程序段2 # endif 其中表達(dá)式為常量表達(dá)式,其意義是當(dāng)指定的表達(dá)式值為非零時(shí),程序段1參與編譯,程序段2不參與編譯;否則,反之。 這種形式的條件編譯命令使預(yù)處理程序能根據(jù)給定的條件確定哪個(gè)程序段參與編譯,哪個(gè)程序段不參與編譯。 在上述一般形式中,當(dāng)程序段2不出現(xiàn)時(shí),也可簡(jiǎn)寫(xiě)為 #if 表達(dá)式 程序段 # endif 條件編譯與if語(yǔ)句有重要區(qū)別:條件編譯是在預(yù)處理時(shí)判定的,不產(chǎn)生判定代碼,其中一個(gè)不滿足條件的程序段不參與編譯,不會(huì)產(chǎn)生代碼;且語(yǔ)句是在運(yùn)行時(shí)判定的,且編譯產(chǎn)生判 定代碼和兩個(gè)分支程序段的代碼。因此,條件編譯可減少目標(biāo)程序長(zhǎng)度,能提高程序執(zhí)行速度。但條件編譯只能測(cè)試常值或常量表達(dá)式,而且語(yǔ)句能對(duì)表達(dá)式作動(dòng)態(tài)測(cè)試。 條件編譯預(yù)處理命令也可呈嵌套結(jié)構(gòu)。特別是為了便于描述# else后的程序段又是條件編譯情況,引人須處理命令符# elif.它的意思就是# else #if.所以條件編譯須處理命令更一般的形式為 # if 表達(dá)式 1 程序段1 # elif 表達(dá)式 2 程序段2 # elif 表達(dá)式 n 程序段n # else 程序段 n+l # endif �。�2) # ifdef 標(biāo)識(shí)符 程序段1 # else 程序段2 # endif 其中標(biāo)識(shí)符是一個(gè)宏名,上述意義是當(dāng)宏名已被定義,則程序段里參與編譯,程序段2不參與編譯;否則,反之。這里的程序段可以是任何C代碼行,也可以包含預(yù)處理命令行。其中的標(biāo)識(shí)符只要求已定義與否,與標(biāo)識(shí)符被定義成什么是無(wú)關(guān)的。如標(biāo)識(shí)符只用于這個(gè)目的,常用以下形式的宏定義來(lái)定義這類(lèi)標(biāo)識(shí)符: # define 標(biāo)識(shí)符 即標(biāo)識(shí)符之后為空,直接以換行結(jié)束該宏定義命令。 在上述一般形式中,如果程序段2為空,則可簡(jiǎn)寫(xiě)成如下一般形式: # ifdef 標(biāo)識(shí)符 程序段 # endif 條件編譯主要作用是能提高程序的通用性,應(yīng)用于不同的計(jì)算機(jī)系統(tǒng)編譯不同的源程序段。條件編譯另一種應(yīng)用是在程序中插入調(diào)試狀態(tài)下輸出中間結(jié)果的代碼。如: # ifdef DEBUG printf(“a=%d, b=%d \n”, a, b); # endif 程序在調(diào)試狀態(tài)下與包含宏定義命令 # define BEBUG 的頭文件一起編譯;在要獲得最終目標(biāo)程序時(shí),不與包含該宏定義命令的頭文件一起編譯。這樣,在調(diào)試通過(guò)后,不必再修改程序,已獲得了正確的最終程序。為了日后程序維護(hù),將調(diào)試時(shí)使用的程序代碼留在源程序中是專(zhuān)業(yè)程序員習(xí)慣采用的方法。因?yàn)檫@些代碼的存在不影響最終目標(biāo)碼,但有助于日后修改程序時(shí)的調(diào)試需要。 (3) # ifndef 標(biāo)識(shí)符 程序段1 # else 程序段2 # endif |
熱門(mén)資料下載: |
< |
自考最新熱貼: |
【責(zé)任編輯:育路編輯 糾錯(cuò)】 |
|
【育路網(wǎng)版權(quán)與免責(zé)聲明】 | |
① 凡本網(wǎng)注明稿件來(lái)源為"原創(chuàng)"的所有文字、圖片和音視頻稿件,版權(quán)均屬本網(wǎng)所有。任何媒體、網(wǎng)站或個(gè)人轉(zhuǎn)載、鏈接、轉(zhuǎn)貼或以其他方式復(fù)制發(fā)表時(shí)必須注明"稿件來(lái)源:育路網(wǎng)",違者本網(wǎng)將依法追究責(zé)任; | |
② 本網(wǎng)部分稿件來(lái)源于網(wǎng)絡(luò),任何單位或個(gè)人認(rèn)為育路網(wǎng)發(fā)布的內(nèi)容可能涉嫌侵犯其合法權(quán)益,應(yīng)該及時(shí)向育路網(wǎng)書(shū)面反饋,并提供身份證明、權(quán)屬證明及詳細(xì)侵權(quán)情況證明,育路網(wǎng)在收到上述法律文件后,將會(huì)盡快移除被控侵權(quán)內(nèi)容。 |
報(bào)考直通車(chē) |
熱點(diǎn)專(zhuān)題 |
·重慶:2011年自考各專(zhuān)業(yè)課程考試安排表 |
·浙江:7月7.41萬(wàn)人參加自學(xué)考試 |
·廣州:2010年10月自考報(bào)名通知 |
·同濟(jì)大學(xué):2010年上半年自考畢業(yè)證發(fā)放 |
·陜西:2011年自學(xué)考試共開(kāi)考96個(gè)專(zhuān)業(yè) |
·山東:64所院校將進(jìn)行自考實(shí)踐課程試點(diǎn) |
·萬(wàn)州區(qū):2010年10月自考報(bào)名時(shí)間通知 |
·北京:2010年建成自考標(biāo)準(zhǔn)化考點(diǎn)試點(diǎn) |
·江蘇(南京)2010年7月自考成績(jī)查詢 |
·湖北:2010年7月自考成績(jī)查詢 |
·北京:2010年7月自考首次全部實(shí)行網(wǎng)評(píng) |
·廣東中山2010年7月自學(xué)考試順利結(jié)束 |
·自考五種情況可以申請(qǐng)免考 |
·湖北:2010年10月自考(委托開(kāi)考)(本科)教材大 |
·江蘇:2010年10月自考教材大綱表 |
·江蘇:2010年自考新聞學(xué)(本科)考試計(jì)劃 |
·江蘇:2010年自考機(jī)械制造及自動(dòng)化(獨(dú)立本科 |
·江蘇:2010年自考機(jī)械制造及自動(dòng)化(獨(dú)立本科 |
·北京:2010年10月計(jì)算機(jī)通信工程報(bào)考安排 |
·廣東:2010年7月自考使用計(jì)算器通知 |
·萬(wàn)州區(qū):2010年10月自考報(bào)名時(shí)間通知 |
·寧波:2010年7月自考成績(jī)查詢時(shí)間 |
·北京:2010年10月自考通信信息管理報(bào)考安排 |
·北京:2010年3門(mén)證書(shū)課程補(bǔ)報(bào)名通知 |
·云南:2010年10月開(kāi)考義務(wù)教育等專(zhuān)業(yè) |
·福建:2010年10月自考報(bào)考簡(jiǎn)章 |
·福建:2010年下半年自考實(shí)踐性環(huán)節(jié)考核時(shí)間安 |
·福建:2010年10月自考報(bào)名時(shí)間 |
·山西:2010年10月自考報(bào)考簡(jiǎn)章 |
·北京:2010年10月通信信息管理報(bào)考安排 |
誠(chéng)聘英才 | 廣告招商 | 關(guān)于網(wǎng)站 | 聯(lián)系我們 | 地方加盟 | 商務(wù)合作 | 投訴建議 | 老師加盟 | 客服中心 | 網(wǎng)站地圖 | 學(xué)校中心 |
學(xué)員報(bào)名服務(wù)中心: 北京北三環(huán)西路32號(hào)恒潤(rùn)中心18層1803室(交通位置圖) |
咨詢電話:北京- 010-51268840/41 傳真:010-51418040 上海- 021-51567016/17 |
本站法律顧問(wèn):邱清榮律師 |
1999-2010 育路教育版權(quán)所有| 京ICP證100429號(hào) |