有三種宏表達式:文本表達式、邏輯表達式和算術(shù)表達式。文本表達式是任何文本、宏變量、宏函數(shù)或宏調(diào)用的組合,通常產(chǎn)生文本。
簡介宏表達式一般分為3種,文本、邏輯和算術(shù)表達式。
文本表達式就是文本、宏變量、宏函數(shù)、宏調(diào)用的任意組合。文本表達式能夠被宏處理器解析從而生成文本。如&test,%macr01,%eval(1+2)等。
宏邏輯表達式和宏算術(shù)表達式就是一系列的算符和組件的組合,并且可以生成一個結(jié)果。算術(shù)表達式包含算術(shù)算符,邏輯表達式包含邏輯算符。
算術(shù)和邏輯表達式中的組件是文本,但是一個表示數(shù)字的組件可以在表達式被解析的時候被暫時地轉(zhuǎn)換成一個數(shù)值并進行相應(yīng)的數(shù)值計算。14.5.1 宏處理器如何處理算術(shù)表達式默認的來說,宏處理器使用整數(shù)算法對數(shù)值進行計算,這時默認只有整數(shù)和十六進制。
帶參數(shù)宏表達式的應(yīng)用宏定義也可用來定義多個表達式,在宏調(diào)用時進行表達式的替換。請看下面的例子。
帶參數(shù)宏表達式應(yīng)用
#include
#define ABC(v.W,m) v=x+y;W=x*z;m=x+Y+z; /*帶參數(shù)宏表達式定義*/
main()
{
int x=2,Y=3,z=4,w,ww,mm; /*定義了幾個整型變量*/
ABC(¨vv,ww,mm); /*帶參數(shù)宏定義調(diào)用*/
printf("vv=%d\n ww=%d\n mm=%d\n",vv,ww,mm );/*屏幕顯示輸出*/
}
形式宏表達式可以取如下形式之一:
1.[+[一]運算對象[{+|-|/|*}運算對象]
2.運算對象||運算對象[||運算對象]…
單獨在形式1中出現(xiàn)的運算對象或單獨在形式2中出現(xiàn)的運算對象可以是允許的運算對象中的任意一個.與符號或算術(shù)算符一起使用的運算對象必須是十進整數(shù)或定點宏變量.形式2的表達式可以包含從整型到字符型的轉(zhuǎn)換,這個轉(zhuǎn)換按照表式傳送規(guī)則來完成.
宏表達式細分為定點表達式和字符表達式.包含沒有賦值的宏變量的宏表達式是錯誤的.用完全跟執(zhí)行時表達式一樣的辦法對宏表達式求值.1
本詞條內(nèi)容貢獻者為:
宋春霖 - 副教授 - 江南大學(xué)