C语言预处理#运算符的细节

#运算符将宏的一个参数转换为字符串字面量,它仅允许出现在带参数的宏的替换列表中。

例如:使用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;                         \
}                                                              \


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值