这个 C 程序如何评估

Shu*_*dra 2 c

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

Sha*_*our 5

在宏中,对操作数# 进行字符串化#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段说:

相邻的字符串文字标记被连接起来