以文本方式查看主题

-  中文XML论坛 - 专业的XML技术讨论区  (http://bbs.xml.org.cn/index.asp)
--  『 C/C++编程思想 』  (http://bbs.xml.org.cn/list.asp?boardid=61)
----  [求助]宏定义中为什么有副作用  (http://bbs.xml.org.cn/dispbbs.asp?boardid=61&rootid=&id=69586)


--  作者:kid1986
--  发布时间:11/18/2008 11:09:00 PM

--  [求助]宏定义中为什么有副作用
#include <iostream>
#define ABS(a) ((a < 0) ? (-(a)) : (a))
int main()
{
int x = -5;
std::cout << ABS(++x) << '\n';
}
/* Output:
3
*/
我知道用inline可以用避免出现这个问题,但是想知道为什么会出现副作用啊,是什么导致了副作用的出现?谢谢了
--  作者:kid1986
--  发布时间:11/24/2008 9:29:00 PM

--  
都没有人回答哦,自己回答下,主要因为  条件?( 值1:值2 )这个三木运算符在条件中++x已经运算了一次,后面的取值又运算了一次。
唉,又问了个傻×的问题~~
--  作者:卷积内核
--  发布时间:11/25/2008 3:26:00 PM

--  
其实宏在编程中的副作用主要表现在编译器的处理计算上,如果考虑不周全很容易出现重复计算的问题。所以写程序要用宏的简洁,又要注意其中的陷阱,以防出现莫名其妙的错误(当然寻根问底也不是莫名其妙啦)。
W 3 C h i n a ( since 2003 ) 旗 下 站 点
苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
35.156ms