C语言的#运算符

C语言的#运算符

在这里插入图片描述

引言

在类函数宏中(带参数的宏),#号作为一个预处理运算符,可以把记号转换成字符串。

示例分析

下面是一个类函数宏:

#define PSQR(X) printf("The square of X is %d. \n",((X)*(X))

假设这样使用宏:

PSQR(8);

输出为

The square of X is 64.

注意双引号字符串中X被视为普通文本,而不是一个可被替换的记号。

C语言允许在字符串中包含宏参数。在类函数宏中(带参数的宏),#号作为一个预处理运算符,可以把记号转换成字符串。例如,如果x是一个宏形参,那么#x就是转换为字符串“x”的形参名 。这个过程称为字符串化

示例:

/* subst.c -- substitute in string */
#include <stdio.h>
#define PSQR(x) printf("The square of " #x " is %d.\n",((x)*(x)))

int main(void)
{
    int y = 5;
    
    PSQR(y);
    PSQR(2 + 4);
    
    return 0;
}

该程序的输出如下:

The square of y is 25.
The square of 2 + 4 is 36.

调用第一个宏时,用“y”替换#x,调用第二个宏时,用"2 + 4"替换#x。ANSI C字符串的串联特性将这些字符串与printf()语句的其他字符串组合,生成最终的字符串。例如,第一次调用变成:

printf("The square of ""y"" is %d.\n",((y)*(y)));

然后,字符串串联功能将这三个字符串组合成一个字符串:

"The square of y is %d.\n"

注意,#的这种作用只有在类函数宏的替换体中才能发挥这种作用。


参考资料:

史蒂芬・普拉达. C Primer Plus (第6版) 中文版[M]. 人民邮电出版社, 2016.

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Galaxy_Robot

你的鼓励将是我创作的最大动力!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值