- 相關(guān)推薦
C語言中如何定義函數(shù)式宏
導(dǎo)語:眾所周知,宏擴(kuò)展是純粹的文本擴(kuò)展,若定義不明確,就會(huì)導(dǎo)致結(jié)果錯(cuò)誤,或者編譯錯(cuò)誤,尤其是定義函數(shù)式宏時(shí),下面有三條規(guī)則可以使我們避免出錯(cuò)。具體有哪些呢?一起來學(xué)習(xí)下吧:
規(guī)則1:宏體必須使用括號包起來,以便保護(hù)表達(dá)式中低優(yōu)先級的操作符。
例:
#define square(x)x*x
調(diào)用如下:
1/square(n)
會(huì)被擴(kuò)展為
1/n*n
這等價(jià)于(1/n)*n,而我們需要的是
1/(n*n)
規(guī)則2:在宏定義內(nèi)部,所有參數(shù)的出現(xiàn)都必須用括號括起來,以便保護(hù)實(shí)參中任何低優(yōu)先級的操作符不受宏擴(kuò)展其他部分的影響。
同樣以square()為例,調(diào)用
square(n+1);
會(huì)被擴(kuò)展為
n+1*n+1
但我們需要的是
(n+1)*(n+1)
規(guī)則3:如果一個(gè)參數(shù)在擴(kuò)展中出現(xiàn)了多次,并且實(shí)參是帶有副作用的表達(dá)式,則宏可能不能正確運(yùn)行。
再以square()宏為例,調(diào)用
square(i++)
會(huì)被擴(kuò)展為
i++*i++
這很顯然是未定義的
遵循規(guī)則1和規(guī)則2的正確square宏的定義應(yīng)該是:
#define square(x) ( (x) * (x) )
【C語言中如何定義函數(shù)式宏】相關(guān)文章:
C語言中的預(yù)編譯宏定義09-07
簡單講解C語言中宏的定義與使用07-30
C語言宏定義07-01
C 語言中宏的使用08-02
C語言函數(shù)的定義07-13
C語言宏定義技巧09-03
C語言的宏定義分析09-10
C語言中函數(shù)的區(qū)分08-30
C語言預(yù)定義宏用法10-06