これらの両方の方法でデバッグフラグがオンまたはオフであることを宣言したい:
#define inDebugMode true
また
const bool inDebugMode = true;
Visual Studio 2010 のコンパイラは常に警告を出します:
warning C4127: conditional expression is constant
何故ですか?どうすれば正しく宣言できますか?
これらの両方の方法でデバッグフラグがオンまたはオフであることを宣言したい:
#define inDebugMode true
また
const bool inDebugMode = true;
Visual Studio 2010 のコンパイラは常に警告を出します:
warning C4127: conditional expression is constant
何故ですか?どうすれば正しく宣言できますか?
コードを見なければ、次の構造を持っていると思われます。
if (inDebugMode)
{
}
これは常に でtrue
あるため、警告が表示されます。
代わりにプリプロセッサを使用することをお勧めしif
ます:
#define inDebugMode 1
#if inDebugMode
#endif
これにより、警告が削除され、不要なデバッグ コードがコンパイルされなくなります。コンパイラ スイッチを介してマクロの値を指定することもできます/D
。
cl.exe /DinDebugMode=1 ...
ただし、コマンド ライン オプションを選択した場合は、変更されたソースだけでなく、すべてのソースを再構築する必要があります。
この警告は定義のためではなく、それを使用するためのものです。
次のようなコードを書いたとしましょう。
if (inDebugMode)
{
//your code
}
コンパイラがそれに遭遇したとき(定義の場合はプリコンパイル後)、これは常に真であり、「if」は必要ないと考えます。つまり、エラーではなく単なる警告です。
それを避けるために、次のようにすることができます:
#define inDebugMode 1
//some code
#if inDebugMode
//your code you only want to run in debug
#endif
この方法では、「#if」セクションのすべてのコードをデバッグしない場合、プリコンパイラによって省略され、コンパイラに問題はありません。
プリプロセッサ ディレクティブが気に入らず、const bool を使用したい場合は、「警告 C4127」を直接無効にすることができます (プロジェクト プロパティ / C/C++ / 詳細設定 / 特定の警告を無効にする / 「4127」と入力)。