宏的机制是在预处理的时候实现替换
例:
#define ADD(x, y) ((x) + (y))
替换过程中存在因为优先级导致代码出错的问题,故我们要加上括号确保运算的正确次序
如果不加,下面代码就会出错
int main()
{
cout << ADD(a, b) * 10 << endl;
cout << a + b * 10 << endl;
cout << ADD(a | b, a & b)<< endl;
cout << a | b + a & b << endl;//加号优先级高于或且运算符
}
宏的缺点
- 语法复杂,要注意的细节太多,容易出错
- 没有类型安全性检查
- 不能调试
可以用const enum inline来替代宏