请教大家一个c语言的宏定义的问题

2020-01-15 19:22发布

如下的宏定义:
#define ADD(a,b) a+b

c=ADD(a,b)*ADD(a++,++b);
是可以编译过去的,但是如果使用下面的公式则编译不过去
c=a+b*a+++++b;

个人理解使用宏展开后和上述公式应该是一致的啊,为啥一个可以编译过去,一个不可以?
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
13条回答
wswh2o
1楼-- · 2020-01-16 21:38
程序当然不会这么写,只是看到这样一个问题,所以追问一下原因。
jnck
2楼-- · 2020-01-17 02:15
takashiki 发表于 2017-8-30 05:50
你也知道宏定义要用括号分清楚,那么第一个方案就是错的。无法正确识别ADD(11)的意图 ...

是的,宏定义一律用括号。
xuzhiping9889
3楼-- · 2020-01-17 06:35
 精彩回答 2  元偷偷看……
sbusr
4楼-- · 2020-01-17 10:59
宏是直接替换,你试试把你用宏的地方直接替换后是啥
wswh2o
5楼-- · 2020-01-17 12:06
二楼是真相,
zhugean
6楼-- · 2020-01-17 17:40
#define ADD(a,b)    ((a)+(b))

一周热门 更多>