#include <stdio.h>
#define dprintf(expr) printf(#expr "=%d\n",expr)
int main()
{
int x=7;
int y=3;
dprintf(x/y);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我得到的输出为 x/y=2 我很困惑如何打印“x/y”
在宏中,对操作数# 进行字符串化#expr,因此将获取参数并将它们转换为字符串,并且由于相邻的字符串文字被连接起来,"=%d\n"因此它会被连接起来,最终得到:
printf( "x/y" "=%d\n",expr)
Run Code Online (Sandbox Code Playgroud)
这将变成:
printf( "x/y=%d\n",expr)
Run Code Online (Sandbox Code Playgroud)
为了完整地考虑C99 草案标准部分的6.10.3.2 # 操作符第 2段,它#相当长且难以阅读,所以我不会引用它,但5.1.1.2 翻译阶段第 6段说:
相邻的字符串文字标记被连接起来