朋友别哭吉他弹唱谱:有时间看一下这个题好么,有关C语言的?

来源:百度文库 编辑:高考问答 时间:2024/04/29 15:32:42
有以下程序
#include <stdio.h>
#define f(x) x*x
main()
{int i;
i=f(4+4)/f(2+2);
printf("%d\n",i);}
执行后输出结果是 28
为什么是这个答案呢?
我百思不得其解
渴求仙人指点!
该程序可以运行

define 就是像一个等价替换
f()像一个壳,x是内容
define的变量展开后要把壳去掉也就是
f(4+4)/f(2+2)展开后是
4+4×4+4/2+2×2+2=4+16+2+4+2=28
所以按原来的想法定义应该是
#define f(x) (x)*(x)
就是预期的结果了

f(4+4)/f(2+2)=4+4*4+4/2+2*2+2=28

输入这段程序就能运行吗?

i=4+4*4+4/2+2*2+2=28,注意x*x没带括号不是(x)*(x)

这是宏定义经常出的一个问题 如果参数没有括号的话 展开运算就等于4+4*4+4/2+2*2+2=28

不懂