C語言的預(yù)處理_第1頁
C語言的預(yù)處理_第2頁
C語言的預(yù)處理_第3頁
C語言的預(yù)處理_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論