您的位置:首页 > 其它

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

2016-12-07 15:09 49 查看
定义了一个宏定义形式的"函数":

#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形式的"函数"必须格外小心。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: