大規模なレガシー コード ベースで作業しているときに、今日、定義が重複しているのではないかと疑っていましたが、多くのコンパイル時の計算に依存していたため、依存関係は人間には明らかではありませんでした。
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
このようなチェックのための本当に覚えやすい方法はありますか? そして、古い勇敢なコンパイラを責めないでください;-)