在我们的代码库的某个地方,有一个包含文件——可能是系统包含——它本身就包含了定义遗留C max符号的系统文件:
#define max(a,b) (a) > (b) ? (a) : (b)
是的,宏很可怕。不是我的马戏团等等。问题是我们的一些源代码使用
#include <limits>
int x = std::numeric_limits<int>::max();
但此时,预处理器使用上述宏来文本替换该函数调用,显然编译失败。所以我们必须
#undef max
在代码块的开头附近,这也很可怕。有没有一种方法可以找出哪个包含文件包含定义最大宏的文件(包括文件…)?或者有更好的方法来处理这个问题吗?