当前位置: 首页 > 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/news/321593.html

相关文章:

  • 程序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中数据处理库,机器学习库以及自动化与爬虫
  • 设计模式-行为型模式-中介者模式
  • 【C#】DllImport的使用
  • 力扣19 删除链表的倒数第N个节点 Java版本
  • eBPF系列:开发流程
  • 【HarmonyOS】鸿蒙仿iOS线性渐变实现
  • 如何像专家一样修复任何 iPhone 上的“iPhone 已禁用”错误
  • 【Go】Go语言切片(Slice)深度剖析与应用实战
  • chsharp文件如何查找在unity中使用的 位置?
  • 【React】组件通信
  • docker windows下清理后,磁盘空间未释放原因及解决方法
  • 计算机前沿技术-人工智能算法-大语言模型-最新研究进展-2024-09-27