关于C语言 求助

来源:百度知道 编辑:UC知道 时间:2024/06/04 15:02:20
#define f(x) x*x
main()
{int i;
i=f(4+4)/f(2+2);
printf("%d\n",i);
这个答案写的是28 原因是4+4*4+4/2+2*2+2
小弟不明白的是不是应该先算括号里面的吗 这个有什么规律吗
如果括号里是4+5怎么办 应该是取4还是取5
还有 我电脑上的TC程序为什么打上这段程序什么也不输出 有时打书上的程序也不怎么输出
谢谢~~~!~!

编译预处理程序对宏定义指令进行处理时,是将程序中所有出现该宏名的地方进行替换,注意是替换而已。
你如果要换括号里面的,把语句i=f(4+4)/f(2+2);换成i=(f(4+4))/(f(2+2));
举例,如果前一个括号里是4+5,答案就是4+5*4+5/2+2*2+2;
你这个打出来也无法运行,最起码的是没有反括号的,还有就是#include <stdio.h>

#define f(x) x*x
宏是预编译命令,也就是在编译之前,将代码中的所有f(x)直接替换成x*x,
程序中有两个地方需要替换
f(4+4),换成4+4*4+4
f(2+2),换成2+2*2+2
语句i=f(4+4)/f(2+2);
替换出来就是:i=4+4*4+4/2+2*2+2;

你的意思是:编译器会先计算括号中的4+4=8,然后将f(8)替换为8*8
这是不对的,预编译之前不会进行任何运算。编译器总是生搬硬套的按照宏定义直接替换代码。

这是宏容易出错的问题之一,安全的做法是:#define f(x) ((x)*(x))
记住两点:1.整个表达式外加一个括号;2.每个变量加一个括号
如此一来,语句i=f(4+4)/f(2+2);
替换出来就是:i=((4+4)*(4+4))/((2+2)*(2+2))

TC编译器
按Ctrl+F9运行程序,如果有错会提示Error,成功运行则会提示Success。
运行完毕后,按Alt+F5查看运行结果。
编译错误的话会有具体的错误提示,自己检查一下。
关于TC的使用最好参考一下相关的书籍,文档或资料。

问题在于定义语句本身,否则就算写成
i=(f(4+4))/(f(2+2));
也还是错的。
这个宏定义应该写成
#define f(x) ((x)*(x))
你可以看一看系统提供的若干宏定义,都是含有很多括号的。

应该是格式错误..
f(x)里的X应该为常数.而不是一个运算式

#define f(x)