C/C++宏定义的不安全性
早就听说#define有不靠谱之处,平时写代码也对它多有抵触情绪;今日偶然一用,大跌眼镜
1 |
通常预处理器只对宏定义做相应的字符替换,编译器不做语法检查;visual studio 则能在替换后检查语法。
无编译错误,调用的时候无论如何都算不对
1 | return MAX(Depth(T->lchild), Depth(T->rchild)) + 1; |
加号的运算优先级如何处理?
C/C++宏定义的不安全性
早就听说#define有不靠谱之处,平时写代码也对它多有抵触情绪;今日偶然一用,大跌眼镜
1 | #define MAX(a,b) (a>b)?a:b |
通常预处理器只对宏定义做相应的字符替换,编译器不做语法检查;visual studio 则能在替换后检查语法。
无编译错误,调用的时候无论如何都算不对
1 | return MAX(Depth(T->lchild), Depth(T->rchild)) + 1; |
加号的运算优先级如何处理?
C/C++宏定义的不安全性