C語言的預處理_第1頁
C語言的預處理_第2頁
C語言的預處理_第3頁
C語言的預處理_第4頁
全文預覽已結束

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

本文格式為Word版,下載可任意編輯——C語言的預處理C語言的預處理

#define和#include是最常用的預處理,單片機程序不用其他預處理也完全可行。下面是我為大家?guī)淼年P于C語言的預處理的學識,接待閱讀。

分類解釋

在編譯器編譯之前,會首先探尋預處理指令,按照指令完成編譯,預處理又分為:文件包含、條件編譯、布局操縱雜注和宏替換。

文件包含:

#include和#include,前者是和該c文件一致目次下的.h,如#includeos_cfg.h,或指明路徑的.h,如#includesoftwareucos-iisourceucos_ii.h;

后者是編譯器系統(tǒng)路徑中的.h,一般C語言標準庫函數(shù)在編譯器里集成,如#include。

只要包含了.h,而.h里有函數(shù)聲明或變量、布局體實例,那么不管這個函數(shù)變量、布局體實例在那個.c文件里定義的,都可以在主C文件中使用。

對于函數(shù),可以按功能分類成各種模塊,集合在一起寫成一個.c文件,然后作同名的.h給出函數(shù)聲明,假設模塊太多,也可以再用一個.h來包含各模塊的.h,uCOS-II中的includes.h就是這樣。

對于變量,C模塊中的全局變量只對該模塊有效,假設想要被其他C文件訪問,就得在.h里聲明,假設主C包含了這個.h,那么此變量就成了真正全局的了。

對于布局體實例,其布局的定義可以放在.h里,假設不需要四處定義好多實例放在c里也可以,實例定義在c里,而聲明放在.h里,這樣就四處可用此實例了。

#include的對象直接插入到了該位置,所以可能展現(xiàn)#include重復甚至嵌套,用#ifndef...#define...代碼...#endif的方法可以保證重復包含的.h那個只在第一次展現(xiàn)時編譯.

條件編譯:

上面的#ifndef就是條件編譯的一種。條件編譯主要用于跳過某些代碼不編譯,這樣可以用來寫一個C文件,但是適應不同硬件版本,或者可采用不同算法。我就經(jīng)常用多種算法寫同一個功能,#definemethod1,#ifmethof==1...#endif,#ifmethod==2...#endif

Protothread的神秘功能就是用宏和條件編譯來實現(xiàn)的。舉個例子:

#defineLC_INITss=0;

#defineLC_RESUMEsswitchscase0:

#defineLC_SETss=__LINE__;case__LINE__:

#defineLC_ENDs

#definePT_BEGINptcharPT_YIELD_FLAG=1;LC_RESUMEpt-lc

每個線程執(zhí)行一次PT_BEGINpt,這樣就創(chuàng)造了一個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:,下次進到線程之直接走LC_RESUMEs里的switch到上次的位置

布局操縱/雜注:

主要是#pragma,從實用的角度講,就是編譯器為了簡化用戶操作,給用戶供給了一些命令,不同編譯器是不一樣的,譬如,IAREW430就可以直接定義中斷函數(shù)而不用管中斷向量表在哪兒。譬如ARM7就要編譯前手動改程序段的中斷向量表,DSPF2812就要用程序指令改數(shù)據(jù)段的中斷向量表,而51那么由keil自動放置中斷跳轉(zhuǎn)指令。

#pragmavector=PORT1_VECTOR

__interruptvoidPort_1void

//code

編譯器會自動給中斷函數(shù)指定中斷向量。

宏替換:

宏函數(shù)其實可以高明的代替函數(shù),尤其是很短又沒有局部變量的'一些語句,還可以代換好多繁雜的格式,如

#defineF%6.2f

#defineF3FFF

用函數(shù)printfF3,a,b,c,可以同時指定a,b,c的格式

其他:

預定義標識符

為了處理一些有用的信息,預處理定義了一些預處理標識符,雖然各種編譯器的預處理標識符不盡一致,但是他們都會處理下面的4種:

__FILE__正在編譯的文件的名字

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論