C++宏中的“#”與“##”用法

在C/C++的宏中“#”與"##"用法: 

       “#”宏參數變爲一個字符串,簡單說就是在它引用的宏變量的左右各加上一個雙引號;##“宏是把兩個宏參數貼合在一起,就是將兩個宏參數合併成一個名字。

如定義:#define MACRO_STRING(x) (#x)
       char *pChar = "hello";
       char *pChar = MACRO_STRING(hello); //則這兩者是等價的。

還有一個#@是加單引號,其實將宏參數變成一個字符變量
#define MAKE_CHAR(x)  #@x
char ch = MAKE_CHAR(b);與char ch = 'b';等價。

##的定義

#define CONS_NAME(a, b) (a##b)

int tmp = CONS_NAME(3, 40); 與 int tmp = 340是等價的

當宏參數是另一個宏的時候

需要注意的是凡宏定義裏有用'#'或'##'的地方宏參數是不會再展開.
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)

轉載:http://blog.csdn.net/wenrenhua08/article/details/40343725

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章