有以下程序#include <stdio.h>#define N 5#define M N+1 #define f(x) (x*M) main() { int i1,i2; i1=f(2) i2=f(1+1); printf("%d %d\n",i1,i2); }程序的运行结果是______。
A.12 12
B.11 7
C.11 11
D.12 7
参考答案:B
解析:评析:在编译时预处理程序用“替换文本”来替换宏,并用对应的实参来替换“替换文本”。此题中的替换文本分别为: N+1、(x*M)。引用带参的宏名i1=f(2),在经过宏替换后i1=2'N+1=2'5+1=11(注:因为对宏M的替换中N+1没有加括号,所以对宏f(x)的替换文本展开后就变为:x*N+1形式);与上相同i2在引用带参的宏名并替换展开后变为: i2=1+1*N+1=1+1*5+1=7,所以答案选B。