有以下程序 #include <stdio.h> #define FNA(x) x*x #define FNB(x) x+x main() { int a=2,b=4; printf("%d,%d

admin2020-06-16  31

问题 有以下程序
    #include <stdio.h>
    #define FNA(x)  x*x
    #define FNB(x)  x+x
    main()
    {   int a=2,b=4;
      printf("%d,%d\n",FNA(FNB(a)),FNB(FNA(b)));
    }
程序运行后的输出结果是

选项 A、8,16
B、16,32
C、8,32
D、16,16

答案C

解析 带参数的宏定义不是进行简单的字符串替换,而是要进行参数替换。替换过程是:用宏调用提供的实参字符串,直接置换宏定义命令行中相应形参字符串,非形参字符保持不变。FNA(FNB(a))的替换过程为:FNA(2+2)替换为2+2*2+2,计算结果为8。FNB(FNA(b))的替换过程为:FNB(4*4)替换为4*4+4*4=32。程序运行后的输出结果是8,32,C选项正确。
转载请注明原文地址:https://kaotiyun.com/show/giCp777K
0

最新回复(0)