单选题
有以下程序:
#include <stdio.h>
#define FNA(x) x*x
#define FNB(x) x+z
main()
{ int a=2,b=4;
printf("%d,%d/n",FNA(FNB(a)),FNB(FNA(b)));
}
程序运行后的输出结果是______。
【正确答案】
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选项正确。