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

C++学习,# 和 ## 运算符

C++中,# 和 ## 是两个特殊的预处理运算符,它们主要在宏定义中使用,用于字符串化和标记粘贴(token pasting)操作。

 

# 运算符:字符串化

# 运算符用于将其后的宏参数转换为一个字符串常量。如果宏参数是一个宏标识符,则它会被转换成用双引号括起来的该标识符的字符串表示。这个操作在需要将宏参数作为字符串处理时非常有用。

示例:

#define STRINGIFY(x) #x    
int main() {  
    const char* str = STRINGIFY(hello world); // str 将会是 "hello world"  
    return 0;  
}

 

## 运算符:标记粘贴

## 运算符用于在宏扩展时连接两个标记(token)。如果两个宏参数之间放置了 ## 运算符,那么这两个参数在宏扩展时会被合并成一个标记。这个操作在需要根据宏参数动态生成标识符时非常有用。

示例:

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

 

注意事项

  • # 和 ## 运算符只能在宏定义中使用。
  • 使用 ## 运算符时,如果任一操作数在宏扩展后为空,则行为是未定义的。
  • # 运算符生成的字符串不包括任何周围的引号,但它确实会生成一个字符串字面量。
  • 这两个运算符是预处理指令的一部分,它们在编译之前由预处理器处理。

 


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

相关文章:

  • 使用CNN进行验证码识别:深度学习与图像预处理教程
  • 鸿蒙之多选框(Checkbox)
  • 网络基础Linux
  • 会话信息处理: HttpSession、token序列化、收集登录设备信息、基于`spring-session-data-redis`实现session共享。
  • 利用编程语言和脚本编写技术,实现自动化渗透测试和安全工具的开发
  • 闯关leetcode——3178. Find the Child Who Has the Ball After K Seconds
  • 程序bug的修复之道
  • Kafka技术详解[6]: 创建主题
  • css div多边框斜角边框
  • 配置virtualbox,在windows中与ubuntu共享文件夹
  • Halcon基础系列1-基础算子
  • uni-app canvas文本自动换行
  • 探索 Snowflake 与 Databend 的云原生数仓技术与应用实践 | Data Infra NO.21 回顾
  • 基于matlab语音滤波系统
  • 排序--希尔排序
  • C#入门教程
  • python 实现knn sklearn K近邻分类算法
  • 最新的iOS 18版本和Android 15版本系统分别升级了哪些功能?
  • [大语言模型] 情感认知在大型语言模型中的近期进展-2024-09-26
  • SLF4J报错log4j又报错
  • 新书推荐——《深度学习精粹与PyTorch实践》
  • 网络安全专业,在校大学生如何赚外快,实现财富自由?零基础入门到精通,收藏这一篇就够了
  • Linux下的基本指令/命令(二)
  • 面试小妙招:轻松绕过五大“坑”,展现真实自我
  • python中数据处理库,机器学习库以及自动化与爬虫
  • 设计模式-行为型模式-中介者模式