这个宏替换多次应该给出错误?

时间:2011-06-02 18:05:33

标签: c++ c macros

#define a b
#define b c
#define c d
main()
{
    int a=192;
    printf("%d\n",a);
    printf("%d\n",b);
    printf("%d\n",c);
    printf("%d\n",d);
}

输出为192。如何宣布a,b,c?

4 个答案:

答案 0 :(得分:3)

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

因此,该系列定义告诉预处理器用a替换a的内容,用c替换b的内容,并用d替换c的内容。

所以你得到的是与时间打印相同的值

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

答案 1 :(得分:2)

结果代码是

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

当然会四次打印相同的值。

答案 2 :(得分:2)

在你的定义中,你要对编译器说a-> b,b-> c,c-> d到底用d替换所有东西

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

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

答案 3 :(得分:1)

你看过预处理器的输出了吗?

提示:您认为该行

int a=192;

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