函數(shù)式宏(function-like macro)較之對象式宏可以進(jìn)行更復(fù)雜的代換。

成都創(chuàng)新互聯(lián)主營景寧畬族自治網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營網(wǎng)站建設(shè)方案,成都APP應(yīng)用開發(fā),景寧畬族自治h5小程序開發(fā)搭建,景寧畬族自治網(wǎng)站營銷推廣歡迎景寧畬族自治等地區(qū)企業(yè)咨詢
函數(shù)式宏 sqr 是在編譯時展開并填入程序的,因此 只要是能用雙目運算符 * 進(jìn)行乘法計算的數(shù)據(jù)類型,都能使用函數(shù)式宏 。
函數(shù)定義則需為每個形參都定義各自的數(shù)據(jù)類型,返回值的類型也只能為一種。就這點而言,函數(shù)較為嚴(yán)格。
函數(shù)為我們默默無聞地進(jìn)行了一些復(fù)雜處理,如:
而函數(shù)式宏所做的工作只是宏展開和填入程序,并不進(jìn)行上述處理。
根據(jù)以上特征, 函數(shù)式宏或許能使程序的運行速度稍微提高一點,但是程序自身卻有可能變得臃腫 。
函數(shù)式宏在使用上必須小心謹(jǐn)慎。例如, sqr(a++) 展開后 ((a++) * (a++)) 。每次展開, a 的值都會自增兩次。在不經(jīng)意間表達(dá)式被執(zhí)行了兩次,導(dǎo)致程序出現(xiàn)預(yù)料之外的結(jié)果,我們稱這種情況為宏的 副作用(side effect) 。
主要用于函數(shù)重定義,通用性,可以用一個變量符號替代另一個變量符號
格式:#define M(x,y) x+y
在主程序里寫入z=M(6,9);等價于z=6+9;而寫成z=(6-8,9);等價于z=6-8+9 ;直接代入
還有就是 :#define Uint unsigned int 即用 Uint 代替unsigned int 便于書寫,還有就是不同操作系統(tǒng)的通用變量識別
宏定義的基礎(chǔ)知識。引用宏定義時,直接代入進(jìn)行代換。
既然已經(jīng)宏定義SUB(a) (a)-(a),而程序中出現(xiàn)的對應(yīng)a的是a+b,那么就將a換為a+b代入表達(dá)式:
d=SUB(a+b)*c=(a+b)-(a+b)*c=(2+3)-(2+3)*5
直接用(a+b)-(a+b)代換SUB(a+b)。這一點和數(shù)學(xué)是不同的,不要強(qiáng)行往數(shù)學(xué)上靠。
標(biāo)題名稱:c語言宏寫函數(shù) c語言宏函數(shù)怎么用
鏈接URL:http://chinadenli.net/article32/ddodjpc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供Google、自適應(yīng)網(wǎng)站、用戶體驗、網(wǎng)站設(shè)計、ChatGPT、網(wǎng)站營銷
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)