1

大規模なレガシー コード ベースで作業しているときに、今日、定義が重複しているのではないかと疑っていましたが、多くのコンパイル時の計算に依存していたため、依存関係は人間には明らかではありませんでした。

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

このようなチェックのための本当に覚えやすい方法はありますか? そして、古い勇敢なコンパイラを責めないでください;-)

4

2 に答える 2

1

BOOST_STATIC_ASSERTコンパイラで動作するかどうかを試してください。

于 2014-09-26T11:36:51.583 に答える