宏定义中 ## 和 # 的作用
宏定义中 ## 和 # 的作用 转载: https://www.cnblogs.com/yinheyi/p/5971614.html 内核中有很多的宏定义,在宏定义define中经常看到两个字符串##和#,这里把它的用法做一下说明: 1. ## ##是一个连接符号,用于把参数连在一起 例如: > #define FOO(arg) my##arg 则 > FOO(abc) 相当于 myabc 2.#: 是“字符串化”的意思。出现在宏定义中的#是把跟在后面的参数转换成一个字符串 例如: > #define STRCPY(dst, src) strcpy(dst, #src) 则 > STRCPY(buff, abc) 相当于 strcpy(buff, "abc") 3.注意事项: 另外,带有#与##参数的本身也是一个宏的话,则这个宏不会会被展开 。 如: 当有'#'或'##'的时候 #define A (2) #define STR(s) #s #define CONS(a,b) int(a##e##b) printf("int max: %s\n", STR(INT_MAX)); // INT_MAX #include<climits> 这行会被展开为: printf("int max: %s\n", "INT_MAX"); printf("%s\n", CONS(A, A)); /