大哈欠E 发表于 2013-8-19 11:16:37

为什么a执行了两次增1?

¹12-3:使用宏时,不允许参数发生变化。

    示例:如下用法可能导致错误。

    #define SQUARE( a ) ((a) * (a))

    int a = 5;

    int b;

    b = SQUARE( a++ ); // 结果:a = 7,即执行了两次增 1。

lcofjp 发表于 2013-8-19 11:18:38

b = ((a++)*(a++)); 你觉得应该增几?

大哈欠E 发表于 2013-8-19 11:22:49

lcofjp 发表于 2013-8-19 11:18 static/image/common/back.gif
b = ((a++)*(a++)); 你觉得应该增几?

嗯,谢谢。。

lusson 发表于 2013-8-19 11:44:01

b = SQUARE( a++ );

你这样的语句太危险了。。

lovelywwei 发表于 2013-8-19 12:00:46

这就是典型的宏的副作用。

tongdayusu 发表于 2013-8-19 12:18:50

像是整人的考题。

lusson 发表于 2013-8-19 12:26:51

lovelywwei 发表于 2013-8-19 12:00 static/image/common/back.gif
这就是典型的宏的副作用。

不是宏的副作用,是楼主使用的方式的问题

wye11083 发表于 2013-8-19 12:41:37

lusson 发表于 2013-8-19 12:26 static/image/common/back.gif
不是宏的副作用,是楼主使用的方式的问题

呵呵,这不如用INLINE好用,而且INLINE可以调试。
页: [1]
查看完整版本: 为什么a执行了两次增1?