|
楼主 |
发表于 2008-3-20 22:33
|
显示全部楼层
宏定义时的括号的完备性
在定义一些常量值的时候这些不是太明显,可是在定义一些的计算值的时候,比如:
#define Y(a, b) a*b
这样的宏就很成问题,当a或者b本来就是一个表达式的时候就可以出现意想不到的错误,如下
Y ( 1, 2+3 )
这样代入计算是1 * 2 + 3,肯定是错误的...
同样定义如#define Y(a, b) (a) + (b)也括号也是不完备的,如果出现
(3 * Y(1, 2))这样的计算的话也是不对的,所以括号完备的应该是
#define Y ( a, b ) ((a) + (b)),不仅要把每个元素都括住,同样,整个表达式也要括住
另外在定义宏的时候,应该注意的是如上面的,a, b的值在宏的执行过程中应该尽量不变的,如果真要求要在计算后改变变量的值,那么可以在后面明确地加上该语句,
[ 本帖最后由 jinry 于 2008-3-20 22:40 编辑 ] |
|