在處理大型遺留代碼庫時,我今天懷疑重複的定義,但依賴對我來說並不明顯,因爲它依賴於大量的編譯 - 時間計算。在編譯時使用較舊的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