作用:將巨集定義中的傳入引數名轉換成用一對雙引號括起來引數名字串。其只能用於有傳入引數的巨集定義中,且必須置於巨集定義體中的引數名前。如:
#define example( instr ) printf( "the input string is:\t%s\n", #instr )
#define example1( instr ) #instr
當使用該巨集定義時:
example( abc ); // 在編譯時將會展開成:printf("the input string is:\t%s\n","abc")
string str = example1( abc ); // 將會展成:string str="abc"
注意, 對空格的處理:
a. 忽略傳入引數名前面和後面的空格。
如:str=example1( abc );//將會被擴充套件成 str="abc"
b.當傳入引數名間存在空格時,編譯器將會自動連線各個子字串,用每個子字串之間以乙個空格連線,忽略剩餘空格。
如:str=exapme( abc def);//將會被擴充套件成 str="abc def"
作用:將巨集定義的多個形參轉換成乙個實際引數名。
如:
#define examplenum( n ) num##n
使用:
int num9 = 9;
int num = examplenum( 9 ); // 將會擴充套件成 int num = num9
注意:
a. 當用##連線形參時,##前後的空格可有可無。
如: #define examplenum( n ) num ## n
// 相當於 #define examplenum( n ) num##n
b. 連線後的實際引數名,必須為實際存在的引數名或是編譯器已知的巨集定義。
c. 如果##後的引數本身也是乙個巨集的話,##會阻止這個巨集的展開。
#include #include #define strcpy(a, b) strcpy(a ## _p, #b)
int main()
結果:
var1 = var2
var2 = var1
作用:將傳入單字元引數名轉換成字元,以一對單引用括起來。如:
#define makechar(x) #@x
char a = makechar( b ); //展開後變成了:a = 'b';
注意 \ 前留空格。
當巨集引數是另乙個巨集的時候,需要注意的是凡巨集定義裡有用』#』或』##』的地方巨集引數是不會再展開。
1、非#和##的情況
#define tow (2)
#define mul(a,b) (a*b)
printf("%d*%d=%d\n", tow, tow, mul(tow,tow));
//這行的巨集會被展開為:
printf("%d*%d=%d\n", (2), (2), ((2)*(2)));
//mul裡的引數tow會被展開為(2).
2、當有#或##的時候
#define a 2
#define str(s) #s
#define cons(a,b) (int)a##e##b
printf("int max: %s\n", str(int_max)); // int_max #include //這行會被展開為:
//printf("int max: %s\n", "int_max");
printf("%s\n", cons(a, a)); // compile error
//這一行則是:
//printf("%s\n", int(aea));
//int_max和a都不會再被展開, 然而解決這個問題的方法很簡單. 加多一層中間轉換巨集.
//加這層巨集的用意是把所有巨集的引數在這層裡全部展開, 那麼在轉換巨集裡的那乙個巨集(_str)就能得到正確的巨集引數.
#define a 2
#define _str(s) #s
#define str(s) _str(s) // 轉換巨集
#define _cons(a,b) (int)a##e##b
#define cons(a,b) _cons(a,b) // 轉換巨集
printf("int max: %s\n", str(int_max)); // int_max,int型的最大值,#include //輸出為: int max: 2147483647
//str(int_max) --> _str(2147483647) 然後再轉換成字串;
printf("%d\n", cons(a, a));
//輸出為:200
//cons(a, a) --> _cons(2, 2) --> (int)2e2
C語言巨集中 和 的用法
c語言巨集中 和 的用法 一 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 include include using namespace std define str s s define cons a,b int a e b int main printf st...
C語言 巨集中 和 的用法
巨集中 和 的用法 一 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 include include using namespace std define str s s define cons a,b int a e b int main 二 當巨集引數是另乙個巨...
C語言巨集中 和 的用法
一 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 include include using namespace std define str s s define cons a,b int a e b int main printf str vck 輸出字串 vc...