0

現在、(部分的に) 同じ定数を定義する 2 つのヘッダーを使用しようとしています。通常、定数は同じである必要がありますが、私の計画は、絶対に確実にするためにチェックを追加することです。この問題は、次の最小限の例で説明できます。

#include "header1.h" //Defines MY_CONSTANT 99
#include "header2.h" //Also defines MY_CONSTANT 99

コンパイルは可能ですが、警告

警告: "MY_CONSTANT" が再定義されました

両方のヘッダーが同じ値を定義していることを確認したいので、無視しないでください。

私の計画は、値が等しいことを確認して2番目のヘッダーを含める前に、定義を未定義にすることでした。定数の最初の値を C++ const として保存しようとし、静的アサーションを追加しましたが、コンパイラが必要なことをしていないようです:

#include "header1.h" //Defines MY_CONSTANT 99
const uint64_t MY_CONSTANT_OLD = MY_CONSTANT;
#undef MY_CONSTANT
#include "header2.h" //Defines again MY_CONSTANT 99
static_assert(MY_CONSTANT_OLD == MY_CONSTANT, "Redefined with other value"); //Check same definition

MY_CONSTANT' はこのスコープで宣言されていません

値が等しくない場合にコンパイラ エラーが発生して定数を再定義する問題を解決するにはどうすればよいですか?

4

0 に答える 0