巨集中"#"和"##"的用法
一、一般用法
我們使用#把巨集引數變為乙個字串,用##把兩個巨集引數貼合在一起.
用法:
#include#includeusing namespace std;#define str(s) #s
#define cons(a,b) int(a##e##b)
int main()
二、當巨集引數是另乙個巨集的時候
需要注意的是凡巨集定義裡有用'#'或'##'的地方巨集引數是不會再展開.
1, 非'#'和'##'的情況
#define tow (2)這行的巨集會被展開為:#define mul(a,b) (a*b)
printf("%d*%d=%d ", tow, tow, mul(tow,tow));
printf("%d*%d=%d ", (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 ", str(int_max));// int_max #include
printf("int max: %s ", "int_max");
int_max和a都不會再被展開, 然而解決這個問題的方法很簡單. 加多一層中間轉換巨集.
加這層巨集的用意是把所有巨集的引數在這層裡全部展開, 那麼在轉換巨集裡的那乙個巨集(_str)就能得到正確的巨集引數.
#define a (2)輸出為: int max: 0x7fffffff#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 ", str(int_max));// int_max,int型的最大值,為乙個變數 #include
str(int_max) --> _str(0x7fffffff) 然後再轉換成字串;
printf("%d ", cons(a, a));輸出為:200
cons(a, a) --> _cons((2), (2)) --> int((2)e(2))
巨集中 和 的用法
巨集中 和 的用法 一 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 i nclude i nclude using namespace std define str s s define cons a,b int a e b int main 二 當巨集引數是另乙...
巨集中 和 的用法
巨集中 和 的用法 一 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起.用法 i nclude i nclude using namespace std define str s s define cons a,b int a e b int main 二 當巨集引數是另乙...
巨集中 和 的用法
一 一般用法 我們使用 把巨集引數變為乙個字串,用 把兩個巨集引數貼合在一起。用法 include include using namespace std define str s s define cons a,b int a e b int main 二 當巨集引數是另乙個巨集的時候 需要注意的...