#include <stdio.h>
#define dprintf(expr) printf(#expr "=%d\n",expr)
int main()
{
int x=7;
int y=3;
dprintf(x/y);
return 0;
}
我的输出为x / y = 2 我很困惑如何打印“x / y”
答案 0 :(得分:4)
在宏中,#
stringifies操作数使得#expr
将获取参数并将它们转换为字符串,并且由于相邻的字符串文字被连接,因此它将被连接到{ {1}}所以你最终得到:
"=%d\n"
将成为:
printf( "x/y" "=%d\n",expr)
完整起见草案C99 draft standard部分printf( "x/y=%d\n",expr)
#运算符段 2 涵盖6.10.3.2
它相当长并且难以阅读所以我不会引用它但是#
翻译阶段段 6 表示:
相邻的字符串文字标记是连接的
答案 1 :(得分:0)
dprintf(x/y);
扩展为
printf("x/y" "=%d\n", x/y);
评估为:
printf("x/y" "=%d\n", 7 / 3);
现在因为x和y是整数,x / y的结果是2(整数)
所以输出为x/y=2
注意c预处理器#指令将#expr替换为“expr”。
另请注意,c编译器只会将相邻的字符串文字连接成一个字符串,即printf("Hello " "World\n");
等同于printf("Hello World\n");
有关详细信息,请参阅http://gcc.gnu.org/onlinedocs/cpp/Stringification.html#Stringification。