这个C代码的输出是如何产生的?

这个C代码的输出是如何产生的?,c,output,C,Output,这是上一次考试中的一个问题,我似乎不知道我们是如何从这段代码中得到输出的。我知道如何得到5,但似乎很难解决接下来的两个数字 #include <stdio.h> #define FIRST(x,y) x + y*y #define SECOND(p,q) printf("%" #p "\n", q) int main(void) { int a = 1, b = 2; printf("%d", FIRST(a,b)); printf("%d", FIRST

这是上一次考试中的一个问题,我似乎不知道我们是如何从这段代码中得到输出的。我知道如何得到5,但似乎很难解决接下来的两个数字

#include <stdio.h>

#define FIRST(x,y) x + y*y
#define SECOND(p,q) printf("%" #p "\n", q)

int main(void) {
    int a = 1, b = 2;
    printf("%d", FIRST(a,b));
    printf("%d", FIRST(a,b+1));
    SECOND(d,a);
    return 0;
}
  • 在宏中“替换”该值时,不会首先对其求值

    i、 e.printf(“%d”,a+b+1*b+1)

  • 这个更简单,它将参数p替换为字符串文本

    i、 e.printf(“%d\n”,a)

  • printf(“%d”,第一个(a,b))
    首先(a,b)
    扩展到
    a+b*b
    。计算时,1+2*2=5。这张照片是5张

    printf(“%d”,第一个(a,b+1))
    首先(a,b+1)
    扩展到
    a+b+1*b+1
    。计算时,1+2+1*2+1=6。这张照片是6

    SECOND(d,a)扩展为
    printf(“%”d“\n”,a)1这将打印1和换行符


    1宏中的
    #p
    表示“实际参数的文字文本,转换为字符串常量”。请参阅。

    您不了解该计划的哪些方面?有三种单位数打印操作。宏
    FIRST
    没有在展开中插入参数,因此其行为异常。调用SECOND时的
    d
    用作格式,而不是变量。您可以使用
    i
    来代替
    d
    首先(a,b+1)
    扩展到
    a+b+1*b+1
    ,该值将计算为6
    SECOND(d,a)
    扩展到
    printf(“%d\n”,a)
    ,它将打印1。
    561