在处理大型遗留代码库时,我今天怀疑重复的定义,但依赖对我来说并不明显,因为它依赖于大量的编译 - 时间计算。在编译时使用较旧的C++实现检查一些编译时定义
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
与非字面维数组:
typedef char bla[0]; // immediate compiler error
typedef char bla[0 != 0]; // obvious, but no compiler error HERE
是否有这样的检查一个非常容易记的方式吗? 而且,请不要责怪老勇敢的编译器;-)
你想要一个静态断言? – 2014-09-26 11:31:50
@NeilKirk是的,似乎是这样,我不知道这个词,对不起。 – Wolf 2014-09-26 11:33:31
我建议你使用免费的软件C++ 11编译器(最近的[Clang](http://clang.llvm.org/)或最近的[GCC](http://gcc.gnu.org/))。 ..) – 2014-09-26 12:14:26