如何在C中理解这个#define

Lud*_*wig 1 c c-preprocessor

我正在阅读"The C puzzle book",我发现了#define,我想了解它是如何工作的.

#define PRINT(int) printf(#int " = %d\n", int)
Run Code Online (Sandbox Code Playgroud)

我之前从未见过类似#int的东西所以我写了一个小程序来试试上面的内容

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

Result: 10 = 10
Run Code Online (Sandbox Code Playgroud)

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

谢谢.

oua*_*uah 5

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

printf(#int " = %d\n", int)
Run Code Online (Sandbox Code Playgroud)

printf("10" " = %d\n", 10);
Run Code Online (Sandbox Code Playgroud)

这相当于:

printf("10 = %d\n", 10);
Run Code Online (Sandbox Code Playgroud)

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