define的含義

define的含義

ID:40533684

大小:33.50 KB

頁數(shù):3頁

時間:2019-08-04

define的含義_第1頁
define的含義_第2頁
define的含義_第3頁
資源描述:

《define的含義》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在教育資源-天天文庫。

1、使用帶參數(shù)的宏定義可完成函數(shù)調(diào)用的功能,又能減少系統(tǒng)開銷,提?運行效率。正如C語言中所講,函數(shù)的使用可以使程序更加模塊化,便于組織,而且可重復(fù)利用,但在發(fā)生函數(shù)調(diào)用時,需要保留調(diào)用函數(shù)的現(xiàn)場,以便子函數(shù)執(zhí)行結(jié)束后能返回繼續(xù)執(zhí)行,同樣在子函數(shù)執(zhí)行完后要恢復(fù)調(diào)用函數(shù)的現(xiàn)場,這都需要一定的時間,如果子函數(shù)執(zhí)行的操作比較多,這種轉(zhuǎn)換時間開銷可以忽略,但如果子函數(shù)完成的功能比較少,甚至于只完成一點操作,如一個乘法語句的操作,則這部分轉(zhuǎn)換開銷就相對較大了,但使用帶參數(shù)的宏定義就不會出現(xiàn)這個問題,因為它是在預(yù)處理階段即進(jìn)行了宏展開,在執(zhí)行時不需要轉(zhuǎn)換

2、,即在當(dāng)?shù)貓?zhí)行。宏定義可完成簡單的操作,但復(fù)雜的操作還是要由函數(shù)調(diào)用來完成,而且宏定義所占用的目標(biāo)代碼空間相對較大。所以在使用時要依據(jù)具體情況來決定是否使用宏定義。無參宏定義  無參宏定義的一般形式為:#defi?e宏名字符串   無參宏的宏名后不帶參數(shù)?! ∑涠x的一般形式為:#define標(biāo)識符字符串  其中的?#?表示這是一條預(yù)處理命令。凡是以?#?開頭的均為預(yù)處理命令。?define?為宏定義命令。?標(biāo)識符?為所定義的宏名。?字符串?可以是常數(shù)、表達(dá)式、格式串等?! ±纾骸?defi?eM(a+b) 它的作用是指定標(biāo)識符M來代

3、替表達(dá)式(a+b)。在編寫源程序時,所有的(a+b)都可由M代替,而對源程序作編譯時,將先由預(yù)處理程序進(jìn)行宏代換,即用(a+b)表達(dá)式去置換所有的宏名M,然后再進(jìn)行編譯?! 〕绦?:#defineM(a+b)intmain(){ints,y;printf("inputanumber:");scanf("%d",&y);s=M*M;printf("s=%d",s);}上例程序中首先進(jìn)行宏定義,定義M來替代表達(dá)式(a+b),在s=M*M中作了宏調(diào)用。在預(yù)處理時經(jīng)宏展開后該語句變?yōu)椋篠=(a+b)*(a+b)但要注意的是,在宏定義中表達(dá)式

4、(a+b)兩邊的括號不能少。否則會發(fā)生錯誤。如當(dāng)作以下定義后:#difineM(a)+(b)在宏展開時將得到下述語句:S=(a)+(b)*(a)+(b)  對于宏定義還要說明以下幾點:  1.宏定義是用宏名來表示一個字符串,在宏展開時又以該字符串取代宏名,這只是一種簡單的代換,字符串中可以含任何字符,可以是常數(shù),也可以是表達(dá)式,預(yù)處理程序?qū)λ蛔魅魏螜z查。如有錯誤,只能在編譯已被宏展開后的源程序時發(fā)現(xiàn)?! ?.宏定義不是說明或語句,在行末不必加分號,如加上分號則連分號也一起置換。  3.宏定義必須寫在函數(shù)之外,其作用域為宏定義命令起到源

5、程序結(jié)束。如要終止其作用域可使用#undef命令。(有關(guān)#undef請查閱其他資料)帶參宏定義  c語言允許宏帶有參數(shù)。在宏定義中的參數(shù)稱為形式參數(shù),在宏調(diào)用中的參數(shù)稱為實際參數(shù)。對帶參數(shù)的宏,在調(diào)用中,不僅要宏展開,而且要用實參去代換形參?! ⒑甓x的一般形式為:#defi?e宏名(形參?)字符串   在字符串中含有各個形參。帶參宏調(diào)用的一般形式為:宏名(形參?)   例如: #defineM(y)((y)*(y)+3*(y))/*宏定義*/  k=M(5);/*宏調(diào)用*/  在宏調(diào)用時,用實參5去代替形參y,經(jīng)預(yù)處理宏展開后的語

6、句為:k=5*5+3*5  程序2:  #defineMAX(a,b)(a>b)?a:b  main()  {  intx,y,max;  printf("inputtwonumbers:");  scanf("%d%d",&x,&y);  max=MAX(x,y);  printf("max=%d",max);12-5-18define_百度百?baike.baidu.com/view/1441209.htm3/4  ?  上例程序的第一行進(jìn)行帶參宏定義,用宏名MAX表示條件表達(dá)式(a>b)?a:b,形參a,b均出現(xiàn)在條件表達(dá)式中

7、。程序中max=MAX(x,y)為宏調(diào)用,實參x,y,將代換形參a,b。宏展開后該語句為:max=(x>y)?x:y;用于計算x,y中的大數(shù)?! ?define條件編譯  頭文件(.h)可以被頭文件或C文件包含;重復(fù)包含(重復(fù)定義)由于頭文件包含可以嵌套,那么C文件就有可能包含多次同一個頭文件,就可能出現(xiàn)重復(fù)定義的問?的。通過條件編譯開關(guān)來避免重復(fù)包含(重復(fù)定義)  例如#ifndef__headerfileXXX__  #define__headerfileXXX__  文件內(nèi)容  #endif  詳見百科#typedef(很相似的)

8、定義和用法  define()函數(shù)定義一個常量?! 〕A款愃谱兞?,不同之處在于:  在設(shè)定以后,常量的值無法更改  常量名不需要開頭的美元符號($)  作用域不影響對常量的訪問  常量值只能是字符串或數(shù)字例

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文

此文檔下載收益歸作者所有

當(dāng)前文檔最多預(yù)覽五頁,下載文檔查看全文
溫馨提示:
1. 部分包含數(shù)學(xué)公式或PPT動畫的文件,查看預(yù)覽時可能會顯示錯亂或異常,文件下載后無此問題,請放心下載。
2. 本文檔由用戶上傳,版權(quán)歸屬用戶,天天文庫負(fù)責(zé)整理代發(fā)布。如果您對本文檔版權(quán)有爭議請及時聯(lián)系客服。
3. 下載前請仔細(xì)閱讀文檔內(nèi)容,確認(rèn)文檔內(nèi)容符合您的需求后進(jìn)行下載,若出現(xiàn)內(nèi)容與標(biāo)題不符可向本站投訴處理。
4. 下載文檔時可能由于網(wǎng)絡(luò)波動等原因無法下載或下載錯誤,付費完成后未能成功下載的用戶請聯(lián)系客服處理。