使用宏的注意

使用宏的注意
   今晚写个了判断一个数的集合是否是最大堆函数时,在使用宏时碰到了一个小启示:
    #define R(i) (i << 1 + 1)
   上面宏定义本意是求i的右孩子下标的,可是当i = 3时,R(i)却是12.
   困顿了一两分钟,大悟,改为:
    #define R(i) ((i << 1) +1)
   原因是<<的优先级低于+。本来编译器有warning的,但自信那是无关重要的警告。
所以吃了个小亏。

你可能感兴趣的:(使用宏的注意)