这个宏多次替换应该会出错吗

this macro replacement multiple times should give error?

本文关键字:出错 替换      更新时间:2023-10-16
#define a b
#define b c
#define c d
main()
{
    int a=192;
    printf("%dn",a);
    printf("%dn",b);
    printf("%dn",c);
    printf("%dn",d);
}

所有输出为192。a、b、c是如何声明的?

当您使用宏时,您告诉预处理器用宏后面的表达式替换标识符(在您的情况下,是a、b、c(。

因此,这一系列的定义,告诉预处理器用b代替a的内容,用c代替b的内容,和用d代替c的内容

所以你得到的是,相同的值被打印多次

main()
{
    int d = 192;
    printf("%dn", d);
    printf("%dn", d);
    printf("%dn", d);
    printf("%dn", d);
}

生成的代码是

main()
{
    int d=192;
    printf("%dn",d);
    printf("%dn",d);
    printf("%dn",d);
    printf("%dn",d);
}

其当然将打印相同的值四次。

在您的定义中,您对编译器说要替换a->b,b->c,c->d,最后您用d 替换所有内容

所以你的结果代码(在预处理器之后(是:

main()
{
    int d=192;
    printf("%dn",d);
    printf("%dn",d);
    printf("%dn",d);
    printf("%dn",d);
}

您看过预处理器的输出吗?

提示:你认为线是什么

int a=192;

看起来像是在预处理阶段之后?