C/C++宏定义的不安全性

早就听说#define有不靠谱之处,平时写代码也对它多有抵触情绪;今日偶然一用,大跌眼镜

1
#define MAX(a,b) (a>b)?a:b

通常预处理器只对宏定义做相应的字符替换,编译器不做语法检查;visual studio 则能在替换后检查语法。
无编译错误,调用的时候无论如何都算不对

1
return MAX(Depth(T->lchild), Depth(T->rchild)) + 1;

加号的运算优先级如何处理?

Author

Semprathlon / Simfae Dean

Posted on

04/17/2015

Updated on

07/19/2023

Licensed under

Comments