选择题

有以下程序:

#include
#define S(x) x *x
main()
{
   int k=5,j=2;
   printf("%d,%d\n",S(k+j+2),S(j+k+2));
}

程序的运行结果是(     )。

【正确答案】 A
【答案解析】

带参数的宏的替换过程是, 用宏调用提供的实参字符串直接置换宏定义命令行中相应形参字符串,非形参字符保持不变。 S(k+j+2)被置换成 k+j+2*k+j+2, 计算时先计算 2*k, 结果为 21; S(j+k+2)被置换成j+k+2*j+k+2, 计算时先计算 2*j, 结果为 18。 程序的运行结果是 21,18。 答案选择 A 选项。