c - 如何理解 C 语言中的#define

标签 c c-preprocessor

<分区>

我目前正在阅读“The C puzzle book”,我找到了一个#define,我想了解它是如何工作的。

#define PRINT(int) printf(#int " = %d\n", int)

我以前从未见过像#int 这样的东西,所以我写了一个小程序来尝试上面的内容

#include <stdio.h>
#define PRINT(int) printf(#int " = %d\n", int)
int main()
{
    PRINT(10);
}

Result: 10 = 10

在这种情况下,预处理器如何解释#int?我在哪里可以阅读更多相关信息?

谢谢。

最佳答案

# stringizing operator 将名称扩展为带引号的字符串,所以这里:

printf(#int " = %d\n", int)

printf("10" " = %d\n", 10);

相当于:

printf("10 = %d\n", 10);

在示例中,宏定义中的 int 参数名称有点困惑,应该用更好的名称替换。

关于c - 如何理解 C 语言中的#define,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29329472/

相关文章:

c++ - 定义用 0 替换

c - 为什么 "a"的输出是 -80?

c - 如何通过宏向 C 库提供选项

objective-c - 使用 C 预处理器生成 @property 实现(在预处理器中大写一个字符)

c - 如何将 char * const[256] 正确转换为 const char * const*

c - 填充动态字符数组会导致覆盖

c - 代码中只有 ";"的 void 函数有什么作用?

c - 二进制零和 ASCII 字符零之间的区别

c - 有没有办法检测,C 文件被直接编译成可执行文件?

c - 删除字符串中的一个字符