在处理大型遗留代码库时,我今天怀疑重复定义,但这种依赖对我人类来说并不明显,因为它依赖于大量编译时计算。
enum { MAX_ITEMS = 4 }; // defined somewhere in my code universe
enum { ITEMS_MAX = COMPLICATED_CALCULATIONS }; // somewhere else
当我让编译器说话时,我想起了一些类似sizeof
问题的案例。
我通常在代码中(在 IDE 中)放一些像这样的临时公式,然后按 [Alt]+[F9]:
void check() {
char bla[MAX_ITEMS == ITEMS_MAX]; // compiler-error shows difference
// ...but it causes a compiler warning about bla being never used
}
...这只是因为我的编译器(Borland C++ 5.6.4)惰性评估了typedef
具有非文字维度的 for 数组:
typedef char bla[0]; // immediate compiler error
typedef char bla[0 != 0]; // obvious, but no compiler error HERE
像这样的检查有没有一种非常容易记忆的方法?而且,请不要责怪一个勇敢的老编译器;-)