定义了一个宏定义形式的"函数":
#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形式的"函数"必须格外小心。