C 语言 # 和 ## 运算符

2025 年 1 月 7 日 | 阅读 3 分钟

在本文中,我们将讨论 C 语言中的 # 和 ## 运算符及其语法和示例。

什么是 # 运算符?

字符串化运算符 (#) 是一种预处理运算符,它使相应的实际参数被一对引号包围。字符串化运算符通常被称为 # 运算符。它将其前面的输入转换为带引号的字符串。它通常被称为字符串化运算符。它通常与 C 语言中的宏一起使用。

语法

它具有以下语法:

示例

输出

Programming

说明

  • mkstr 宏 被调用,参数为 Programming。
  • 宏的 # 运算符 将 Programming 转换为字符字面量 "Programming"。
  • 之后,printf 函数将字符串 "Programming" 写入终端。

因此,当应用程序运行时,它会在终端上打印字符串 "Programming"。宏定义中的 # 运算符 将参数的值转换为字符串字面量,从而使文本可以作为字符串显示。

什么是标记连接运算符 (##)?

用作实际参数的标记可以使用标记连接运算符 (##) 进行连接。在扩展宏时,将两个标记组合成一个标记通常是有益的。这被称为标记粘贴或标记连接。

标记粘贴由 '##' 预处理运算符完成。当宏被扩展时,每个 '##' 运算符两侧的两个标记合并成一个标记,该标记取代 '##' 和宏扩展中的两个原始标记。

语法

它具有以下语法:

示例

输出

39

说明

  • 一个宏 concat(a, b),它使用 ## 运算符连接 ab,中间没有任何空格。之后,在 main 函数中定义了一个类型为整数的变量 mn,其值为 39。
  • printf 命令使用 concat 宏连接 m 和 n,生成结果标记 mn。它实质上将 concat(m, n) 替换为 mn。
  • 当代码执行并调用 printf 时,将显示变量 mn 的当前值,即 39,因为 mn 被定义为一个包含整数值 39 的整数。

# 和 ## 运算符的优点

# 和 ## 运算符有几个优点。这些运算符的一些主要优点如下:

# 运算符

  • 调试和日志记录:它对于调试日志记录非常有用。例如,它可以用于将宏参数转换为字符串,以便进行调试。
  • 通用宏:它允许设计更通用的宏,这些宏可以与各种类型的值交互,将它们转换为字符串表示以进行指定操作

## 运算符

  • 创建新标识符:它通过合并以前使用的标识符来创建新的标识符或符号。这对于动态创建变量或函数名非常有用。
  • 代码可重用性:它有助于使用宏创建更通用和可重用的代码。例如,在数据结构实现中,必须以不同的名称生成类似的函数或结构。