请教关于#define 的问题

lucky 2006-11-08 01:49:31
有以下代码:
#define ADD(X) X+X
MAIN()
{
int m=1,n=2,k=3;
int sum=ADD(m+n)*k;
printf("%sum=%d",sum);
}
程序运行结果是什么?答案为sum=10,请问是如何得到的??

还有一个
#include "stdio.h"
#define FUNC(y) 2.84+y
#define PR(a) printf("%d",(int)(a))
#define PRINT1(a) PR(a);putch('/n')
main()
{
int x=2;
PRINT1(FUNC(5)*x);
}
运行结果如何得到??能否解释一下?偶对预编译不大懂~~

...全文
465 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
linxb1210 2006-11-08
  • 打赏
  • 举报
回复
不喜欢C的预编译
感觉很容易出错
x123456x 2006-11-08
  • 打赏
  • 举报
回复

第1个ADD(m+n)我还以为是要计算m+n后再代入add呢
威尔亨特 2006-11-08
  • 打赏
  • 举报
回复
学习了,突然感觉C的define很垃圾
lujun5100 2006-11-08
  • 打赏
  • 举报
回复
第二个应该等价于
printf("%d",(int)(2.84+5*2));putch('/n');
goodluckyxl 2006-11-08
  • 打赏
  • 举报
回复
#define ADD(X) X+X
-> #define ADD(X) (X+X )

#define FUNC(y) 2.84+y
-> #define FUNC(y) (2.84+y)

没事加点括号是有用的
pomiox 2006-11-08
  • 打赏
  • 举报
回复
简单的替换,不过要看清替换的内容(尤其是带参宏);程序在被编译时进行替换,不占用内存单元.
jixingzhong 2006-11-08
  • 打赏
  • 举报
回复
预编译,
楼主你就把 define 等的过程代替到代码实现中,
把宏替换掉就可以了 ~~
jixingzhong 2006-11-08
  • 打赏
  • 举报
回复
int m=1,n=2,k=3;
int sum=ADD(m+n)*k;
==》
sum=ADD(m+n)*k = m+n*m+n*k = 1+2*1+2*3 =10

宏只是完成替换,
不保证执行顺序
myfriend023 2006-11-08
  • 打赏
  • 举报
回复
X-->m+n ADD(m+n)*k--->m+n+m+n*k 它是直接替换的所以=10
飞哥 2006-11-08
  • 打赏
  • 举报
回复
就是查找替换的东西

宏本身就是符号替换,不管逻辑问题

所以你要是用的时候注意在参数上加括号
#define ADD(X) ( (X) + (X) )
ckt 2006-11-08
  • 打赏
  • 举报
回复
#define ADD(X) X+X
会把ADD(X) 用X+X来代替,
所以int sum=ADD(m+n)*k;等价于sum=m+n+m+n*k;结果为10

#define FUNC(y) 2.84+y
#define PR(a) printf("%d",(int)(a))
#define PRINT1(a) PR(a);putch('/n')

PRINT1(FUNC(5)*x);=>
printf("%d",int(2.84+5*2)) 结果输出12

nule 2006-11-08
  • 打赏
  • 举报
回复
#define ADD(X) X+X
MAIN()
{
int m=1,n=2,k=3;
int sum=ADD(m+n)*k;
printf("%sum=%d",sum);
}
程序运行结果是什么?答案为sum=10,请问是如何得到的??
————————————————————————————
ADD(m+n)*k 预处理之后就是 m+n+m+n*k ,结果当然是10了。
注意:宏预处理只是简单替换,所以不建议在C++中使用复杂宏替换。

同理,你可以自己替换下第二个问题,看看答案。
chinese_zmm 2006-11-08
  • 打赏
  • 举报
回复
宏只是简单的替换,所以在用宏时需加括号。
malligator 2006-11-08
  • 打赏
  • 举报
回复
宏嘛
不管什么时候,在外多加一层括号吧
sunchuang 2006-11-08
  • 打赏
  • 举报
回复
宏替换就是简单的字符替换,
#define ADD(X) X+X

可改为:
#define ADD(X) (X+X)
aibo0827 2006-11-08
  • 打赏
  • 举报
回复
我晕!!看了半天终于看明白什么意思了!心理有点承受不了啊!
#define ADD(x) 运行(x+x)
就这样的话,那如果,
#define ADD(长运算)*(在乘个什么长点的东西那不就更无奈!)

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧