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
浙公网安备 33010602011771号