c語(yǔ)言當(dāng)前函數(shù)宏定義,c語(yǔ)言 宏 函數(shù)

c語(yǔ)言宏定義函數(shù)如何調(diào)用?

直接調(diào)用即可。如下示例:

成都創(chuàng)新互聯(lián)自成立以來(lái),一直致力于為企業(yè)提供從網(wǎng)站策劃、網(wǎng)站設(shè)計(jì)、成都做網(wǎng)站、網(wǎng)站制作、電子商務(wù)、網(wǎng)站推廣、網(wǎng)站優(yōu)化到為企業(yè)提供個(gè)性化軟件開發(fā)等基于互聯(lián)網(wǎng)的全面整合營(yíng)銷服務(wù)。公司擁有豐富的網(wǎng)站建設(shè)和互聯(lián)網(wǎng)應(yīng)用系統(tǒng)開發(fā)管理經(jīng)驗(yàn)、成熟的應(yīng)用系統(tǒng)解決方案、優(yōu)秀的網(wǎng)站開發(fā)工程師團(tuán)隊(duì)及專業(yè)的網(wǎng)站設(shè)計(jì)師團(tuán)隊(duì)。

#includestdio.h#define sum(b,c){int d=0;d=b+c;printf("兩者的和:%d\n",d);}int main(){ int x=0,y=0; scanf("%d%d",x,y); sum (x,y); return 0;}使用宏函數(shù)或者宏函數(shù)時(shí),注意如下幾點(diǎn):

(1)宏函數(shù)的參數(shù)沒(méi)有類型,預(yù)處理器只負(fù)責(zé)做形式上的替換,而不做參數(shù)類型檢查,所以傳參時(shí)要格外小心。

(2)宏函數(shù)定義要注意格式,尤其是括號(hào)。

如果上面的宏函數(shù)寫成 #define MAX(a, b) (ab?a:b),省去內(nèi)層括號(hào),則宏展開就成了k = (i0x0fj0x0f?i0x0f:j0x0f),運(yùn)算的優(yōu)先級(jí)就錯(cuò)了。同樣道理,這個(gè)宏定義的外層括號(hào)也是不能省的。若函數(shù)中是宏替換為 ++MAX(a,b),則宏展開就成了 ++(a)(b)?(a):(b),運(yùn)算優(yōu)先級(jí)也是錯(cuò)了。

(3)宏函數(shù)往往會(huì)導(dǎo)致較低的代碼執(zhí)行效率。

 int a[]={9,3,5,2,1,0,8,7,6,4};int max(n){return n==0?a[0]:MAX(a[n],max(n-1));}int main(){max(9);return 0;}若是普通函數(shù),則通過(guò)遞歸,可取的最大值,時(shí)間復(fù)雜度為O(n)。但若是宏函數(shù),則宏展開為( a[n]max(n-1)?a[n]:max(n-1) ),其中max(n-1)被調(diào)用了兩遍,這樣依此遞歸下去,時(shí)間復(fù)雜度會(huì)很高。

在C語(yǔ)言中 宏定義是什么?

在C語(yǔ)言源程序中,允許用一個(gè)標(biāo)識(shí)符來(lái)表示一個(gè)字符串,稱為宏,宏定義是由源程序中的宏定義命令完成的,宏替換是由預(yù)處理程序自動(dòng)完成的。宏定義是C提供的三種預(yù)處理功能的其中一種,這三種預(yù)處理包括:宏定義、文件包含、條件編譯。

擴(kuò)展資料:

宏(Macro),是一種批量處理的稱謂。計(jì)算機(jī)科學(xué)里的宏是一種抽象,它根據(jù)一系列預(yù)定義的規(guī)則替換一定的文本模式。

計(jì)算機(jī)語(yǔ)言如C語(yǔ)言或匯編語(yǔ)言有簡(jiǎn)單的宏系統(tǒng),由編譯器或匯編器的預(yù)處理器實(shí)現(xiàn)。C語(yǔ)言的宏預(yù)處理器的工作只是簡(jiǎn)單的文本搜索和替換,使用附加的文本處理語(yǔ)言如M4,C程序員可以獲得更精巧的宏。

參考資料:

宏定義百度百科

c語(yǔ)言的宏定義有哪些技巧

(一)宏定義中的##

連接符與#

##

連接符號(hào)由兩個(gè)井號(hào)組成,其功能是在帶參數(shù)的宏定義中將兩個(gè)子串(token)聯(lián)接起來(lái),從而形成一個(gè)新的子串。但它不可以是第一個(gè)或者最后一個(gè)子串。所謂的子串(token)就是指編譯器能夠識(shí)別的最小語(yǔ)法單元。具體的定義在編譯原理里有詳盡的解釋,但不知道也無(wú)所謂。同時(shí)值得注意的是#符是把傳遞過(guò)來(lái)的參數(shù)當(dāng)成字符串進(jìn)行替代。下面來(lái)看看它們是怎樣工作的。這是msdn上的一個(gè)例子。

假設(shè)程序中已經(jīng)定義了這樣一個(gè)帶參數(shù)的宏:

#define

paster(

n

)

printf(

"token"

#n

"

=

%d",

token##n

)

同時(shí)又定義了一個(gè)整形變量:

int

token9

=

9;

現(xiàn)在在主程序中以下面的方式調(diào)用這個(gè)宏:

paster(

9

);

那么在編譯時(shí),上面的這句話被擴(kuò)展為:

printf(

"token"

"9"

"

=

%d",

token9

);

注意到在這個(gè)例子中,paster(9);中的這個(gè)”9”被原封不動(dòng)的當(dāng)成了一個(gè)字符串,與”token”連接在了一起,從而成為了token9。而#n也被”9”所替代。

可想而知,上面程序運(yùn)行的結(jié)果就是在屏幕上打印出token9=9

(二)"\"與一個(gè)較長(zhǎng)占多行的宏

宏定義中允許包含兩行以上命令的情形,此時(shí)必須在最右邊加上"\"且該行"\"后不能再有任何字符,連注釋部分都不能有,下面的每行最后的一定要是"\","\"后面加一個(gè)空格都會(huì)報(bào)錯(cuò),更不能跟注釋。

#define

exchange(a,b)

{\

int

t;\

t=a;\

a=b;\

b=t;\

}

“C語(yǔ)言的宏定義”是什么?

宏定義又稱為宏代換、宏替換,簡(jiǎn)稱“宏”。

是C提供的三種預(yù)處理功能的其中一種。

1、宏名一般用大寫。

2、使用宏可提高程序的通用性和易讀性,減少不一致性,減少輸入錯(cuò)誤和便于修改。例如:數(shù)組大小常用宏定義。

3、預(yù)處理是在編譯之前的處理,而編譯工作的任務(wù)之一就是語(yǔ)法檢查,預(yù)處理不做語(yǔ)法檢查。

4、宏定義末尾不加分號(hào)。

5、宏定義寫在函數(shù)的花括號(hào)外邊,作用域?yàn)槠浜蟮某绦?,通常在文件的最開頭。

6、可以用#undef命令終止宏定義的作用域。

7、宏定義可以嵌套。

8、字符串" "中永遠(yuǎn)不包含宏。

9、宏定義不分配內(nèi)存,變量定義分配內(nèi)存。

網(wǎng)頁(yè)標(biāo)題:c語(yǔ)言當(dāng)前函數(shù)宏定義,c語(yǔ)言 宏 函數(shù)
路徑分享:http://muchs.cn/article0/phesio.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)網(wǎng)站建設(shè)標(biāo)簽優(yōu)化、企業(yè)網(wǎng)站制作、關(guān)鍵詞優(yōu)化、搜索引擎優(yōu)化、網(wǎng)站營(yíng)銷

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設(shè)