巨集中 和 的用法

2021-08-31 05:02:55 字數 1466 閱讀 1737

巨集中"#"和"##"的用法

一、一般用法  

我們使用#把巨集引數變為乙個字串,用##把兩個巨集引數貼合在一起.  

用法:

#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)  

#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

輸出為: int max: 0x7fffffff  

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 二 當巨集引數是另乙個巨集的時候 需要注意的...