一道二级考试题
下面程序由源程序文件t4.h和t4.c组成,程序编译运行的结果是_______
t4.h源程序如下:
#define N 10
#define f2(x) (x*N)
t4.c源程序如下:
#include "stdio.h "
#define M 8
#define f(x) ((x)*M)
#include "t4.h "
main()
{int i,j;
i=f(1+1); j=f2(1+1);
printf( "%d %d ",i,j);
getch();
}
我算得16,20 答案是16,11
我怎么也想不明白才来问的,请指点一下.
[解决办法]
这个貌似你算错了,呵呵
i=f(1+1);
就是i= (1+1)*8;
j=f2(1+1);
则是j= (1+1*10);
结果当然就是16 11了
[解决办法]
注意看宏定义时的括号
#define f2(x) (x*N)
#define f(x) ((x)*M)
编译时把整个x表达式原封不动搬进去,而不是计算x结果之后才搬进去
[解决办法]
t4.h源程序如下:
#define N 10
#define f2(x) (x*N) /*把这改一下 ((x)*N), 就是楼主想得到的结果*/
[解决办法]
直接用1+1代替x,展开:
f2(1+1) (1+1*N)
f(1+1) ((1+1)*M)
[解决办法]
t4.h源程序如下:
#define N 10
#define f2(x) (x*N)
其实是这样计算的:f2(1+1) 到 (1+1*N) 得到 11