#define宏定义形式的"函数"导致的bug

定义了一个宏定义形式的"函数":

#define  SUM8(YY)

{

     int Y = YY>>2;

  ...

}

然后使用的时候,传入了一个同名的变量Y:

int  Y = Ywin[x];

SUM8(Y)

本意是想展开成int Y = Ywin[x]>>2;

但实际上#define只是把参数名(YY)替换,与函数形式不同,其实展开的结果变成了:

int Y = Ywin[x];

{

int Y = Y>>2;//仅仅把YY替换成参数Y

}

那么 int Y = Y>>2;这句是先定义局部变量Y,再等于自己右移两位。

以后使用#define形式的"函数"必须格外小心。

原文地址:https://www.cnblogs.com/mlj318/p/6141248.html