26. 以下程序的输出结果是为啥是2!不太明白其中的逻辑,希望有一个详细的运算逻辑图

  1. 以下程序的输出结果是 ()
    A) 16 B) 2 C) 9 D) 1
    #define SQR(X) X*X
    main()
    { int a=16, k=2, m=1;
    a/=SQR(k+m)/SQR(k+m);
    printf(“%d\n”,a); }

SQR(k+m)/SQR(k+m) = k+ m*k+m/k+m*k+m = 2+1*2+1/2+1*2+1 = 2+2+0+2+1 = 7
a = a/7 = 2
这个宏定义语法上没问题, 但是以后工作这么写宏定义你要被扣不少工资, 必须写成下面这样

#define SQR(X) ((X)*(X))

宏代换必须要原样代换,不能自己想当然的加括号