



全文預(yù)覽已結(jié)束
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
#ifdef,#else,#endif,#if用法詳解預(yù)處理就是在進(jìn)行編譯的第一遍詞法掃描和語法分析之前所作的工作。說白了,就是對源文件進(jìn)行編譯前,先對預(yù)處理部分進(jìn)行處理,然后對處理后的代碼進(jìn)行編譯。這樣做的好處是,經(jīng)過處理后的代碼,將會變的很精短。關(guān)于預(yù)處理命令中的文件包含(i nclude),宏定義(#define),書上已經(jīng)有了詳細(xì)的說明,在這里就不詳述了。這里主要是對條件編譯(#ifdef,#else,#endif,#if等)進(jìn)行說明。以下分3種情況:1:情況1:#ifdef _XXXX.程序段1.#else.程序段2.#endif這表明如果標(biāo)識符_XXXX已被#define命令定義過則對程序段1進(jìn)行編譯;否則對程序段2進(jìn)行編譯。例:#define NUM.#ifdef NUMprintf(之前NUM有過定義啦!:) n);#elseprintf(之前NUM沒有過定義!:( n);#endif如果程序開頭有#define NUM這行,即NUM有定義,碰到下面#ifdef NUM的時候,當(dāng)然執(zhí)行第一個printf。否則第二個printf將被執(zhí)行。我認(rèn)為,用這種,可以很方便的開啟/關(guān)閉整個程序的某項特定功能。2:情況2:#ifndef _XXXX.程序段1.#else.程序段2.#endif這里使用了#ifndef,表示的是if not def。當(dāng)然是和#ifdef相反的狀況(如果沒有定義了標(biāo)識符_XXXX,那么執(zhí)行程序段1,否則執(zhí)行程序段2)。3:情況3:#if 常量.程序段1.#else.程序段2.#endif這里表示,如果常量為真(非0,隨便什么數(shù)字,只要不是0),就執(zhí)行程序段1,否則執(zhí)行程序段2。我認(rèn)為,這種方法可以將測試代碼加進(jìn)來。當(dāng)需要開啟測試的時候,只要將常量變1就好了。而不要測試的時候,只要將常量變0。# ifdef #ifndef 等用法 文件中的#ifndef頭件的中的#ifndef,這是一個很關(guān)鍵的東西。比如你有兩個C文件,這兩個C文件都include了同一個頭文件。而編譯時,這兩個C文件要一同編譯成一個可運行文件,于是問題來了,大量的聲明沖突。還是把頭文件的內(nèi)容都放在#ifndef和#endif中吧。不管你的頭文件會不會被多個文件引用,你都要加上這個。一般格式是這樣的:#ifndef #define .#endif在理論上來說可以是自由命名的,但每個頭文件的這個“標(biāo)識”都應(yīng)該是唯一的。標(biāo)識的命名規(guī)則一般是頭文件名全大寫,前后加下劃線,并把文件名中的“.”也變成下劃線,如:stdio.h#ifndef _STDIO_H_#define _STDIO_H_.#endif2.在#ifndef中定義變量出現(xiàn)的問題(一般不定義在#ifndef中)。#ifndef AAA#define AAA.int i;.#endif里面有一個變量定義在vc中鏈接時就出現(xiàn)了i重復(fù)定義的錯誤,而在c中成功編譯。結(jié)論:(1).當(dāng)你第一個使用這個頭的.cpp文件生成.obj的時候,int i 在里面定義了當(dāng)另外一個使用這個的.cpp再次單獨生成.obj的時候,int i 又被定義然后兩個obj被另外一個.cpp也include 這個頭的,連接在一起,就會出現(xiàn)重復(fù)定義.(2).把源程序文件擴(kuò)展名改成.c后,VC按照C語言的語法對源程序進(jìn)行編譯,而不是C+。在C語言中,若是遇到多個int i,則自動認(rèn)為其中一個是定義,其他的是聲明。(3).C語言和C+語言連接結(jié)果不同,可能(猜測)時在進(jìn)行編譯的時候,C+語言將全局變量默認(rèn)為強符號,所以連接出錯。C語言則依照是否初始化進(jìn)行強弱的判斷的。(參考)解決方法:(1).把源程序文件擴(kuò)展名改成.c。(2).推薦解決方案:.h中只聲明 extern int i;在.cpp中定義#ifndef _X_H_#define _X_H_extern int i;#endif /_X_H_int i;注意問題:(1).變量一般不要定義在.h文件中。ifndef/define/endif的用法與實例分析用法:.h文件,如下:#ifndef XX_H#define XX_H#endif這樣如果有兩個地方都包含這個頭文件,就不會出現(xiàn)兩次包含的情況,因為在第二次包含時XX_H已經(jīng)有定義了,所以就不再 include了。-#ifndef GRAPHICS_H / 防止graphics.h被重復(fù)引用#define GRAPHICS_H#include / 引用標(biāo)準(zhǔn)庫的頭文件#include “myheader.h” / 引用非標(biāo)準(zhǔn)庫的頭文件void Function1(); / 全局函數(shù)聲明class Box / 類結(jié)構(gòu)聲明;#endif-假設(shè)你的工程里面有4個文件,分別是a.cpp,b.h,c.h,d.ha.cpp的頭部是:#include b.h #include c.h b.h和c.h的頭部都是:#include d.h 而d.h里面有class D的定義。這樣一來,編譯器編譯a.cpp的時候,先根據(jù)#include b.h 去編譯b.h這個問題,再根據(jù)b.h里面的#include d.h ,去編譯d.h的這個文件,這樣就把d.h里面的class D編譯了;然后再根據(jù)a.cpp的第二句#include c.h ,去編譯c.h,最終還是會找到的d.h里面的class D,但是class D之前已經(jīng)編譯過了,所以就會報重定義錯誤。加上ifndef/define/endif,就可以防止這種重定義錯誤。-1.比如你有兩個C文件,這兩個C文件都include了同一個頭文件。而編譯時,這兩個C文件要一同編譯成一個可運行文件,于是問題來了,大量的聲明沖突。還是把頭文件的內(nèi)容都放在#ifndef和#endif中吧。不管你的頭文件會不會被多個文件引用,你都要加上這個。一般格式是這樣的:#ifndef #define .#endif 在理論上來說可以是自由命名的,但每個頭文件的這個“標(biāo)識”都應(yīng)該是唯一的。標(biāo)識的命名規(guī)則一般是頭文件名全大寫,前后加下劃線,并把文件名中的“.”也變成下劃線,如:stdio.h#ifndef _STDIO_H_#define _STDIO_H_.#endif2.在#ifndef中定義變量出現(xiàn)的問題(一般不定義在#ifndef中)。#ifndef AAA#define AAA.int i;.#endif里面有一個變量定義在vc中鏈接時就出現(xiàn)了i重復(fù)定義的錯誤,而在c中成功編譯。原因:(1).當(dāng)你第一個使用這個頭的.cpp文件生成.obj的時候,int i 在里面定義了當(dāng)另外一個使用這個的.cpp再次單獨生成.obj的時候,int i 又被定義然后兩個obj被另外一個.cpp也include 這個頭的,連接在一起,就會出現(xiàn)重復(fù)定義。(2).把源程序文件擴(kuò)展名改成.c后,VC按照C語言的語法對源程序進(jìn)行編譯,而不是C+。在C語言中,若是遇到多個int i,則自動認(rèn)為其中一個是定義,其他的是聲明。(3).C語言和C+語言連接結(jié)果不同,可能(猜測)時在進(jìn)行編譯的時候,C+語言將全局變量默認(rèn)為強符號,所以連接出錯。C語言則依照是
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025四川資源集團(tuán)招聘134人查看職位筆試參考題庫附帶答案詳解
- 2025新入職員工安全培訓(xùn)考試試題答案匯編
- 2025年新入員工安全培訓(xùn)考試試題(突破訓(xùn)練)
- 2025版權(quán)授權(quán)合同范本-網(wǎng)站作品授權(quán)協(xié)議模板
- 2025玉米購銷合同全書
- 2025深圳市建筑設(shè)計合同
- 專利代理委托協(xié)議
- 2025年民間融資的居間服務(wù)合同范本
- 2025年城市公寓租賃合同
- 2025年家居棉品合作協(xié)議書
- 2025-2030中國寵物行業(yè)市場發(fā)展分析及發(fā)展趨勢與投資前景預(yù)測報告
- AGC-AVC培訓(xùn)課件教學(xué)課件
- 山洪災(zāi)害防御知識課件
- 決勝新高考·四川名優(yōu)校聯(lián)盟2025屆高三4月聯(lián)考英語+答案
- 境外道路貨物運輸應(yīng)急預(yù)案
- 中考英語讀寫綜合練習(xí)
- 混凝土供應(yīng)保證方案 2
- 慢性阻塞性肺疾病入院記錄模板-病歷書寫
- 新疆維吾爾自治區(qū)和田地區(qū)各縣區(qū)鄉(xiāng)鎮(zhèn)行政村村莊村名居民村民委員會明細(xì)及行政區(qū)劃代碼
- 軟件測試技術(shù)課程教學(xué)大綱
- 液壓與氣壓傳動完整版課件
評論
0/150
提交評論