(<參數(shù)表>)<宏體> 其中,<宏名>是一個標識符,<參數(shù)表>中的參數(shù)可以是一個,也可以是多個,視具體情況而定,當有多個參數(shù)的時候,每個參數(shù)之間用逗號分隔">
歡迎來到天天文庫
瀏覽記錄
ID:9016865
大?。?3.50 KB
頁數(shù):2頁
時間:2018-04-15
《帶參數(shù)的宏定義#define》由會員上傳分享,免費在線閱讀,更多相關內容在應用文檔-天天文庫。
1、9.1.2帶參數(shù)的宏定義 帶參數(shù)的宏定義的一般形式如下: #define<宏名>(<參數(shù)表>)<宏體> 其中,<宏名>是一個標識符,<參數(shù)表>中的參數(shù)可以是一個,也可以是多個,視具體情況而定,當有多個參數(shù)的時候,每個參數(shù)之間用逗號分隔。<宏體>是被替換用的字符串,宏體中的字符串是由參數(shù)表中的各個參數(shù)組成的表達式。例如: #defineSUB(a,b)a-b如果在程序中出現(xiàn)如下語句: result=SUB(2,3)則被替換為: result=2-3;如果程序中出現(xiàn)如下語句: result=SUB(x+1,y+2);則被替換為: res
2、ult=x+1-y+2; 在這樣的宏替換過程中,其實只是將參數(shù)表中的參數(shù)代入到宏體的表達式中去,上述例子中,即是將表達式中的a和b分別用2和3代入?! ∥覀兛梢园l(fā)現(xiàn):帶參的宏定義與函數(shù)類似。如果我們把宏定義時出現(xiàn)的參數(shù)視為形參,而在程序中引用宏定義時出現(xiàn)的參數(shù)視為實參。那么上例中的a和b就是形參,而2和3以及x+1和y+2都為實參。在宏替換時,就是用實參來替換<宏體>中的形參。下面是帶參數(shù)的宏定義的例子:例9-4?#include#defineSUB(a,b)a-bvoidmain(){ intx,y,result; x=
3、2; y=3; result=SUB(x+2,y-1); cout<<"result="<4、參替換形參。而在函數(shù)中,形參和實參是完全獨立的變量,它們均有自己的作用域。當調用發(fā)生時,實參傳遞給形參的過程(值傳遞或引用傳遞)完全不同于簡單的宏替換?! 。?)在宏定義中的形參是標識符,而宏調用中的實參可以是表達式。如:例9-5?#include#defineSQ(y)(y)*(y)voidmain(){ intx,result; cout<<"inputanumber:"<>x; sq=SQ(x+1); cout<<"result="<5、)(y)*(y)"一行為宏定義,形參為y。程序中宏調用時實參為x+1,是一個表達式,在宏展開時,用x+1代換y,再用(y)*(y)代換SQ,得到如下語句:"result=(a+1)*(a+1);",這與函數(shù)的調用是不同的,函數(shù)調用時要把實參表達式的值求出來再賦予形參。而宏代換中,對實參表達式不作計算直接地照原樣替換。
4、參替換形參。而在函數(shù)中,形參和實參是完全獨立的變量,它們均有自己的作用域。當調用發(fā)生時,實參傳遞給形參的過程(值傳遞或引用傳遞)完全不同于簡單的宏替換?! 。?)在宏定義中的形參是標識符,而宏調用中的實參可以是表達式。如:例9-5?#include#defineSQ(y)(y)*(y)voidmain(){ intx,result; cout<<"inputanumber:"<>x; sq=SQ(x+1); cout<<"result="<5、)(y)*(y)"一行為宏定義,形參為y。程序中宏調用時實參為x+1,是一個表達式,在宏展開時,用x+1代換y,再用(y)*(y)代換SQ,得到如下語句:"result=(a+1)*(a+1);",這與函數(shù)的調用是不同的,函數(shù)調用時要把實參表達式的值求出來再賦予形參。而宏代換中,對實參表達式不作計算直接地照原樣替換。
5、)(y)*(y)"一行為宏定義,形參為y。程序中宏調用時實參為x+1,是一個表達式,在宏展開時,用x+1代換y,再用(y)*(y)代換SQ,得到如下語句:"result=(a+1)*(a+1);",這與函數(shù)的調用是不同的,函數(shù)調用時要把實參表達式的值求出來再賦予形參。而宏代換中,對實參表達式不作計算直接地照原樣替換。
此文檔下載收益歸作者所有