#运算符将宏的一个参数转换为字符串字面量,它仅允许出现在带参数的宏的替换列表中。
例如:使用PRINT_INT宏作为一个快捷的方法来整形变量或者表达式的值,#运算符可以使PRINT_INT为每个输出的值添加标签:
#define PRINT_INT(n) printf(#n " = %d\n", n)n之前的#运算符通知预处理器根据PRINT_INT的参数,创建一个字符串字面量,因此,调用PRINT_INT(i/j);就会变成:
printf("i/j" " = %d\n",i/j)又因为C语言中相邻的字符串字面量会被合并,所以,上面语句等价于:
printf("i/j = %d\n",i/j)##运算符可以将两个记号“粘和”在一起,成为一个记号,如果其中一个是宏参数,“粘和”会在形式参数被相应的实际参数替换后发生。如一下宏:
#define MK_ID(n) i##n当其被调用时,(比如:MK_ID(1)),预处理器首先适用实际参数1替换形式参数n,然后,将i和其粘和,即成为:i1
##运算符的一个应用实例:构造多个版本的max函数:
#define GENERIC_MAX(type) \
type type##_max(type x,type y) \
{ \
return x > y ? x:y; \
} \
本文详细解释了C语言中宏参数如何通过#运算符转换为字符串字面量,以及##运算符如何将两个标记粘合在一起。通过实例展示了如何使用PRINT_INT宏和MK_ID宏来简化代码,并介绍了构造多个版本的max函数的应用。
3264

被折叠的 条评论
为什么被折叠?



