C语言宏中#和##的用法

1.#把宏参数变为一个字符串

2.##把两个宏参数贴合在一起

注意:凡宏定义里有用'#'或'##'的地方宏参数是不会再展开,而一般的宏定义会直接展开

例子:

非'#'和'##'的情况

#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(A));  //这行会被展开为:printf("int max: %s\n", "A");所以打印A,而不是2

printf("%s\n", CONS(A, A));  // 这行会被展开为:printf("%s\n", int(AeA));会报错,compile error

 

更详细情参考:https://wenku.baidu.com/view/7b5cac0102020740be1e9b7a.html

 

posted @ 2017-05-16 18:51  大海中的一粒沙  阅读(534)  评论(0)    收藏  举报