当前位置: 首页 > article >正文

Day32 # 和 ## 运算符

# 和 ## 运算符

今天周日 小学一会

# 和 ## 预处理运算符在 C++ 和 ANSI/ISO C 中都是可用的。# 运算符会把 replacement-text 令牌转换为用引号引起来的字符串。

请看下面的宏定义:

实例

# 运算符是 C 和 C++ 中的预处理器运算符,用于 字符串化,即将宏的参数转换为一个字符串字面值。
#include <iostream>
using namespace std;
// #x 是字符串化运算符,它会把 x 变成一个字符串。
#define MKSTR( x ) #x //它的作用是把传入的参数 x 转换成字符串 
 
int main ()
{
    cout << MKSTR(HELLO C++) << endl;
 
    return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

HELLO C++

让我们来看看它是如何工作的。不难理解,C++ 预处理器把下面这行:

cout << MKSTR(HELLO C++) << endl;

转换成了:

cout << "HELLO C++" << endl;

## 运算符用于连接两个令牌。

下面是一个实例:

#define CONCAT( x, y )  x ## y

当 CONCAT 出现在程序中时,它的参数会被连接起来,并用来取代宏。例如,程序中 CONCAT(HELLO, C++) 会被替换为 “HELLO C++”,如下面实例所示。

实例

#include <iostream>
using namespace std;
 
#define concat(a, b) a ## b
int main()
{
   int xy = 100;
   
   cout << concat(x, y);
   return 0;
}

当上面的代码被编译和执行时,它会产生下列结果:

100

让我们来看看它是如何工作的。不难理解,C++ 预处理器把下面这行:

cout << concat(x, y);

转换成了:

cout << xy;

总结:

  • # 用于 字符串化,将宏参数转换为字符串。
  • ## 用于 连接令牌,将两个宏参数拼接成一个新的标识符。

http://www.kler.cn/a/457391.html

相关文章:

  • node内置模块之---path 模块
  • Redis(二)value 的五种常见数据类型简述
  • Win11+WLS Ubuntu 鸿蒙开发环境搭建(二)
  • 小程序学习07—— uniapp组件通信props和$emit和插槽语法
  • 2、pycharm常用快捷命令和配置【持续更新中】
  • 【C语言】可移植性陷阱与缺陷(三):整数的大小
  • 云计算学习架构篇之HTTP协议、Nginx常用模块与Nginx服务实战
  • 探索 Java 权限修饰符的奥秘
  • C#中相等比较 == 和 Equal函数 对比
  • 在Ubuntu下通过Docker部署Cloudflared Tunnel服务器
  • SpringBoot整合springmvc
  • 遗传算法——附python实现与各方法的作用与修改
  • 【强化学习】深度确定性策略梯度算法(DDPG)详解(附代码)
  • 碰一碰发视频矩阵系统源码搭建,支持OEM
  • Qt仿音乐播放器:QFileDialog添加本地文件
  • BMS存储模块的设计
  • idea 禁用/关闭 sonarlint 后台自动分析(默认开启可能会引起idea卡顿)
  • 【K8s】专题十五(6):Kubernetes 网络之 Pod 网络调试
  • Netty 2024 常见面试题
  • 个人用途虚拟机VM 17安装Ubuntu 16.04.5 图解
  • 大数据面试笔试宝典之Spark面试
  • Java网约车项目实战:实现抢单功能详解
  • golangb并发,Sync包中Mutes,WaitGroup, NewCond的适应
  • 八大排序——直接插入排序
  • 几款性能优秀的差分进化算法DE(SaDE、JADE,SHADE,LSHADE、LSHADE_SPACMA、LSHADE_EpSin)-附Matlab免费代码
  • CAN201 Introduction to Networking(计算机网络)Pt.2 传输层