



下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
本文格式為Word版,下載可任意編輯——C語言的預(yù)處理C語言的預(yù)處理
#define和#include是最常用的預(yù)處理,單片機(jī)程序不用其他預(yù)處理也完全可行。下面是我為大家?guī)淼年P(guān)于C語言的預(yù)處理的學(xué)識,接待閱讀。
分類解釋
在編譯器編譯之前,會首先探尋預(yù)處理指令,按照指令完成編譯,預(yù)處理又分為:文件包含、條件編譯、布局操縱雜注和宏替換。
文件包含:
#include和#include,前者是和該c文件一致目次下的.h,如#includeos_cfg.h,或指明路徑的.h,如#includesoftwareucos-iisourceucos_ii.h;
后者是編譯器系統(tǒng)路徑中的.h,一般C語言標(biāo)準(zhǔn)庫函數(shù)在編譯器里集成,如#include。
只要包含了.h,而.h里有函數(shù)聲明或變量、布局體實(shí)例,那么不管這個(gè)函數(shù)變量、布局體實(shí)例在那個(gè).c文件里定義的,都可以在主C文件中使用。
對于函數(shù),可以按功能分類成各種模塊,集合在一起寫成一個(gè).c文件,然后作同名的.h給出函數(shù)聲明,假設(shè)模塊太多,也可以再用一個(gè).h來包含各模塊的.h,uCOS-II中的includes.h就是這樣。
對于變量,C模塊中的全局變量只對該模塊有效,假設(shè)想要被其他C文件訪問,就得在.h里聲明,假設(shè)主C包含了這個(gè).h,那么此變量就成了真正全局的了。
對于布局體實(shí)例,其布局的定義可以放在.h里,假設(shè)不需要四處定義好多實(shí)例放在c里也可以,實(shí)例定義在c里,而聲明放在.h里,這樣就四處可用此實(shí)例了。
#include的對象直接插入到了該位置,所以可能展現(xiàn)#include重復(fù)甚至嵌套,用#ifndef...#define...代碼...#endif的方法可以保證重復(fù)包含的.h那個(gè)只在第一次展現(xiàn)時(shí)編譯.
條件編譯:
上面的#ifndef就是條件編譯的一種。條件編譯主要用于跳過某些代碼不編譯,這樣可以用來寫一個(gè)C文件,但是適應(yīng)不同硬件版本,或者可采用不同算法。我就經(jīng)常用多種算法寫同一個(gè)功能,#definemethod1,#ifmethof==1...#endif,#ifmethod==2...#endif
Protothread的神秘功能就是用宏和條件編譯來實(shí)現(xiàn)的。舉個(gè)例子:
#defineLC_INITss=0;
#defineLC_RESUMEsswitchscase0:
#defineLC_SETss=__LINE__;case__LINE__:
#defineLC_ENDs
#definePT_BEGINptcharPT_YIELD_FLAG=1;LC_RESUMEpt-lc
每個(gè)線程執(zhí)行一次PT_BEGINpt,這樣就創(chuàng)造了一個(gè)switch,一開頭pt-lc=0,PT_BEGINpt之后持續(xù)執(zhí)行語句本protothread的語句,一般是while1,執(zhí)行到PT_WAIT_UNTILpt,condition之類會調(diào)用LC_SETpt-lc;然后return,于是pt-lc記錄了行號,創(chuàng)造了case:,下次進(jìn)到線程之直接走LC_RESUMEs里的switch到上次的位置
布局操縱/雜注:
主要是#pragma,從實(shí)用的角度講,就是編譯器為了簡化用戶操作,給用戶供給了一些命令,不同編譯器是不一樣的,譬如,IAREW430就可以直接定義中斷函數(shù)而不用管中斷向量表在哪兒。譬如ARM7就要編譯前手動改程序段的中斷向量表,DSPF2812就要用程序指令改數(shù)據(jù)段的中斷向量表,而51那么由keil自動放置中斷跳轉(zhuǎn)指令。
#pragmavector=PORT1_VECTOR
__interruptvoidPort_1void
//code
編譯器會自動給中斷函數(shù)指定中斷向量。
宏替換:
宏函數(shù)其實(shí)可以高明的代替函數(shù),尤其是很短又沒有局部變量的'一些語句,還可以代換好多繁雜的格式,如
#defineF%6.2f
#defineF3FFF
用函數(shù)printfF3,a,b,c,可以同時(shí)指定a,b,c的格式
其他:
預(yù)定義標(biāo)識符
為了處理一些有用的信息,預(yù)處理定義了一些預(yù)處理標(biāo)識符,雖然各種編譯器的預(yù)處理標(biāo)識符不盡一致,但是他們都會處理下面的4種:
__FILE__正在編譯的文件的名字
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 少年宮活動工作總結(jié)模版
- 高三地理復(fù)習(xí)教學(xué)工作總結(jié)
- 公司課程顧問合同范例
- 低價(jià)改造花園合同范例
- 北京河道護(hù)欄網(wǎng)施工方案
- 鄉(xiāng)村建筑銷售合同范本
- 加工代工定制合同范例
- 鄉(xiāng)村植保員合同范例
- 農(nóng)機(jī)安全協(xié)議合同范例
- 產(chǎn)品采購合同范例標(biāo)準(zhǔn)
- 滬教牛津版三年級英語下冊全冊課件
- 天府劉家漕歷史的記憶
- HY∕T 0289-2020 海水淡化濃鹽水排放要求
- MicrosoftOffice2016簡體中文版下載及使用
- 招待所所長崗位職責(zé)內(nèi)容范本
- 北師大版七年級生物下冊 第8章 章末復(fù)習(xí) 課件(共18張PPT)
- 夾膠玻璃作業(yè)指導(dǎo)書
- NLP高效能溝通影響力集團(tuán)李炫華
- 站長辦公會議事規(guī)則
- 畢業(yè)設(shè)計(jì)說明書初稿-頭孢曲松鈉生產(chǎn)工藝設(shè)計(jì)
- EDTA絡(luò)合滴定法測定銀合金中的銀
評論
0/150
提交評論