2
#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”

4

2 回答 2

5

在宏中,将操作数# 字符串化,因此#expr将获取参数并将它们转换为字符串,并且由于相邻的字符串文字被连接起来,因此它将被连接起来,"=%d\n"因此您最终得到:

printf( "x/y" "=%d\n",expr)

这将成为:

printf( "x/y=%d\n",expr)

从草案C99 标准草案部分的完整起见,6.10.3.2 # 运算符2段涵盖了#它相当长且难以阅读,所以我不会引用它,但部分5.1.1.2 翻译阶段6段说:

连接相邻的字符串文字标记

于 2013-09-19T16:14:41.383 回答
1
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 。

于 2013-09-19T16:14:12.353 回答