首頁(yè)考試吧論壇Exam8視線考試商城網(wǎng)絡(luò)課程模擬考試考友錄實(shí)用文檔求職招聘論文下載
2013中考
法律碩士
2013高考
MBA考試
2013考研
MPA考試
在職研
中科院
考研培訓(xùn) 自學(xué)考試 成人高考
四 六 級(jí)
GRE考試
攻碩英語(yǔ)
零起點(diǎn)日語(yǔ)
職稱英語(yǔ)
口譯筆譯
申碩英語(yǔ)
零起點(diǎn)韓語(yǔ)
商務(wù)英語(yǔ)
日語(yǔ)等級(jí)
GMAT考試
公共英語(yǔ)
職稱日語(yǔ)
新概念英語(yǔ)
專四專八
博思考試
零起點(diǎn)英語(yǔ)
托?荚
托業(yè)考試
零起點(diǎn)法語(yǔ)
雅思考試
成人英語(yǔ)三級(jí)
零起點(diǎn)德語(yǔ)
等級(jí)考試
華為認(rèn)證
水平考試
Java認(rèn)證
職稱計(jì)算機(jī) 微軟認(rèn)證 思科認(rèn)證 Oracle認(rèn)證 Linux認(rèn)證
公 務(wù) 員
導(dǎo)游考試
物 流 師
出版資格
單 證 員
報(bào) 關(guān) 員
外 銷 員
價(jià)格鑒證
網(wǎng)絡(luò)編輯
駕 駛 員
報(bào)檢員
法律顧問
管理咨詢
企業(yè)培訓(xùn)
社會(huì)工作者
銀行從業(yè)
教師資格
營(yíng)養(yǎng)師
保險(xiǎn)從業(yè)
普 通 話
證券從業(yè)
跟 單 員
秘書資格
電子商務(wù)
期貨考試
國(guó)際商務(wù)
心理咨詢
營(yíng) 銷 師
司法考試
國(guó)際貨運(yùn)代理人
人力資源管理師
廣告師職業(yè)水平
衛(wèi)生資格 執(zhí)業(yè)醫(yī)師 執(zhí)業(yè)藥師 執(zhí)業(yè)護(hù)士
會(huì)計(jì)從業(yè)資格
基金從業(yè)資格
統(tǒng)計(jì)從業(yè)資格
經(jīng)濟(jì)師
精算師
統(tǒng)計(jì)師
會(huì)計(jì)職稱
法律顧問
ACCA考試
注冊(cè)會(huì)計(jì)師
資產(chǎn)評(píng)估師
審計(jì)師考試
高級(jí)會(huì)計(jì)師
注冊(cè)稅務(wù)師
國(guó)際內(nèi)審師
理財(cái)規(guī)劃師
美國(guó)注冊(cè)會(huì)計(jì)師
一級(jí)建造師
安全工程師
設(shè)備監(jiān)理師
公路監(jiān)理師
公路造價(jià)師
二級(jí)建造師
招標(biāo)師考試
物業(yè)管理師
電氣工程師
建筑師考試
造價(jià)工程師
注冊(cè)測(cè)繪師
質(zhì)量工程師
巖土工程師
造價(jià)員考試
注冊(cè)計(jì)量師
環(huán)保工程師
化工工程師
咨詢工程師
結(jié)構(gòu)工程師
城市規(guī)劃師
材料員考試
監(jiān)理工程師
房地產(chǎn)估價(jià)
土地估價(jià)師
安全評(píng)價(jià)師
房地產(chǎn)經(jīng)紀(jì)人
投資項(xiàng)目管理師
環(huán)境影響評(píng)價(jià)師
土地登記代理人
繽紛校園 實(shí)用文檔 英語(yǔ)學(xué)習(xí) 作文大全 求職招聘 論文下載 訪談|游戲
軟件水平考試
軟件水平考試資訊
軟件水平考試試題
軟件水平考試專項(xiàng)輔導(dǎo)
軟件水平考試交流互動(dòng)
軟件水平考試交流互動(dòng)
您現(xiàn)在的位置: 考試吧 > 軟件水平考試 > 復(fù)習(xí)資料 > 程序員資料 > 正文

2012年軟考程序員輔導(dǎo):C語(yǔ)言預(yù)處理命令總結(jié)

  C程序的源代碼中可包括各種編譯指令,這些指令稱為預(yù)處理命令。雖然它們實(shí)際上不是C語(yǔ)言的一部分,但卻擴(kuò)展了C程序設(shè)計(jì)的環(huán)境。本節(jié)將介紹如何應(yīng)用預(yù)處理程序和注釋簡(jiǎn)化程序開發(fā)過程,并提高程序的可讀性。ANSI標(biāo)準(zhǔn)定義的C語(yǔ)言預(yù)處理程序包括下列命令:#define,#error,#include,#if,#else,#elif,#endif,#ifdef,#ifndef,#undef,#line,#pragma等。非常明顯,所有預(yù)處理命令均以符號(hào)#開頭,下面分別加以介紹。

  一 、#define命令#define定義了一個(gè)標(biāo)識(shí)符及一個(gè)串。在源程序中每次遇到該標(biāo)識(shí)符時(shí),均以定義的串代換它。ANSI標(biāo)準(zhǔn)將標(biāo)識(shí)符定義為宏名,將替換過程稱為宏替換。命令的一般形式為:#define identifier string注意:

  1、該語(yǔ)句沒有分號(hào)。在標(biāo)識(shí)符和串之間可以有任意個(gè)空格,串一旦開始,僅由一新行結(jié)束。

  2、宏名定義后,即可成為其它宏名定義中的一部分。

  3、宏替換僅僅是以文本串代替宏標(biāo)識(shí)符,前提是宏標(biāo)識(shí)符必須獨(dú)立的識(shí)別出來,否則不進(jìn)行替換。例如:#define XYZ this is a tes使用宏printf(“XYZ”);//該段不打印“this is a test”而打印“XYZ”。因?yàn)轭A(yù)編譯器識(shí)別出的是“XYZ”

  4、如果串長(zhǎng)于一行,可以在該行末尾用一反斜杠‘ \’續(xù)行。

  #defineLONG_STRING“this is a very long\ string that is used as an example”

  5、C語(yǔ)言程序普遍使用大寫字母定義標(biāo)識(shí)符。

  6、用宏代換代替實(shí)在的函數(shù)的一大好處是宏替換增加了代碼的速度,因?yàn)椴淮嬖诤瘮?shù)調(diào)用的開銷。但增加速度也有代價(jià):由于重復(fù)編碼而增加了程序長(zhǎng)度。

  二、 #error命令#error強(qiáng)迫編譯程序停止編譯,主要用于程序調(diào)試。

  #error指令使預(yù)處理器發(fā)出一條錯(cuò)誤消息,該消息包含指令中的文本。這條指令的目的就是在程序崩潰之前能夠給出一定的信息。

  三、 #include命令#i nclude使編譯程序?qū)⒘硪辉次募度霂в?include的源文件,被讀入的源文件必須用雙引號(hào)或尖括號(hào)括起來。例如:#include“stdio.h”或者#include這兩行代碼均使用C編譯程序讀入并編譯用于處理磁盤文件庫(kù)的子程序。

  將文件嵌入#i nclude命令中的文件內(nèi)是可行的,這種方式稱為嵌套的嵌入文件,嵌套層次依賴于具體實(shí)現(xiàn)。

  如果顯式路徑名為文件標(biāo)識(shí)符的一部分,則僅在那些子目錄中搜索被嵌入文件。否則,如果文件名用雙引號(hào)括起來,則首先檢索當(dāng)前工作目錄。如果未發(fā)現(xiàn)文件,則在命令行中說明的所有目錄中搜索。如果仍未發(fā)現(xiàn)文件,則搜索實(shí)現(xiàn)時(shí)定義的標(biāo)準(zhǔn)目錄。

  如果沒有顯式路徑名且文件名被尖括號(hào)括起來,則首先在編譯命令行中的目錄內(nèi)檢索。如果文件沒找到,則檢索標(biāo)準(zhǔn)目錄,不檢索當(dāng)前工作目錄。

  四 、條件編譯命令有幾個(gè)命令可對(duì)程序源代碼的各部分有選擇地進(jìn)行編譯,該過程稱為條件編譯。商業(yè)軟件公司廣泛應(yīng)用條件編譯來提供和維護(hù)某一程序的許多顧客版本。

  #if、#else,#elif及#endif #if的一般含義是如果#if后面的常量表達(dá)式為true,則編譯它與#endif之間的代碼,否則跳過這些代碼。命令#endif標(biāo)識(shí)一個(gè)#if塊的結(jié)束。

  #if constant-expression statement sequence #endif Eg:#define MAX 91 #include using namespace std;int main()

  { #if MAX > 99 cout《“MAX is bigger than 99”《endl;#elif MAX > 90 cout《“MAX is bigger than 90”《endl;#else cout《“MAX is smaller than 90”《endl;#endif return 0;}跟在#if后面的表達(dá)式在編譯時(shí)求值,因此它必須僅含常量及已定義過的標(biāo)識(shí)符,不可使用變量。表達(dá)式不許含有操作符sizeof(sizeof也是編譯時(shí)求值)。

  #else命令的功能有點(diǎn)象C語(yǔ)言中的else;#else建立另一選擇(在#if失敗的情況下)。注意,#else屬于#if塊。

  #elif命令意義與ELSE IF 相同,它形成一個(gè)if else-if階梯狀語(yǔ)句,可進(jìn)行多種編譯選擇。#elif 后跟一個(gè)常量表達(dá)式。如果表達(dá)式為true,則編譯其后的代碼塊,不對(duì)其它#elif表達(dá)式進(jìn)行測(cè)試。否則,順序測(cè)試下一塊。

  #if expression statement sequence #elif expression1 statement sequence #endif

  在嵌套的條件編譯中#endif、#else或#elif與最近#if或#elif匹配。

  # ifdef 和# ifndef

  條件編譯的另一種方法是用#ifdef與#ifndef命令,它們分別表示“如果有定義”及“如果無定義”。# ifdef的一般形式是:

  # ifdef macroname statement sequence #endif

  #ifdef與#ifndef可以用于#if、#else,#elif語(yǔ)句中,但必須與一個(gè)#endif.

  #define MAX 91 #include using namespace std;

  int main()

  { #ifdef MAX cout《“hello,MAX!”《endl;#else cout《“where is MAX?”《endl;#endif #ifndef LEO cout《“LEO is not defined”《endl;#endif return 0;}命令#undef 取消其后那個(gè)前面已定義過有宏名定義。一般形式為:#undef macroname命令#line改變__LINE__與__FILE__的內(nèi)容,它們是在編譯程序中預(yù)先定義的標(biāo)識(shí)符。命令的基本形式如下:#line number[“filename”]其中的數(shù)字為任何正整數(shù),可選的文件名為任意有效文件標(biāo)識(shí)符。行號(hào)為源程序中當(dāng)前行號(hào),文件名為源文件的名字。命令#line主要用于調(diào)試及其它特殊應(yīng)用。注意:在#line后面的數(shù)字標(biāo)識(shí)從下一行開始的數(shù)字標(biāo)識(shí)。

文章搜索
軟件水平考試欄目導(dǎo)航
版權(quán)聲明:如果軟件水平考試網(wǎng)所轉(zhuǎn)載內(nèi)容不慎侵犯了您的權(quán)益,請(qǐng)與我們聯(lián)系800@exam8.com,我們將會(huì)及時(shí)處理。如轉(zhuǎn)載本軟件水平考試網(wǎng)內(nèi)容,請(qǐng)注明出處。