3

これらの両方の方法でデバッグフラグがオンまたはオフであることを宣言したい:

#define inDebugMode true

また

const bool inDebugMode = true;

Visual Studio 2010 のコンパイラは常に警告を出します:

warning C4127: conditional expression is constant

何故ですか?どうすれば正しく宣言できますか?

4

3 に答える 3

7

コードを見なければ、次の構造を持っていると思われます。

if (inDebugMode)
{
}

これは常に でtrueあるため、警告が表示されます。

代わりにプリプロセッサを使用することをお勧めしifます:

#define inDebugMode 1

#if inDebugMode
#endif

これにより、警告が削除され、不要なデバッグ コードがコンパイルされなくなります。コンパイラ スイッチを介してマクロの値を指定することもできます/D

cl.exe /DinDebugMode=1 ...

ただし、コマンド ライン オプションを選択した場合は、変更されたソースだけでなく、すべてのソースを再構築する必要があります。

于 2012-06-04T08:33:10.507 に答える
3

この警告は定義のためではなく、それを使用するためのものです。
次のようなコードを書いたとしましょう。

if (inDebugMode)
{
    //your code
}

コンパイラがそれに遭遇したとき(定義の場合はプリコンパイル後)、これは常に真であり、「if」は必要ないと考えます。つまり、エラーではなく単なる警告です。
それを避けるために、次のようにすることができます:

#define inDebugMode 1
//some code
#if inDebugMode
    //your code you only want to run in debug
#endif

この方法では、「#if」セクションのすべてのコードをデバッグしない場合、プリコンパイラによって省略され、コンパイラに問題はありません。

于 2012-06-04T08:36:46.717 に答える
1

プリプロセッサ ディレクティブが気に入らず、const bool を使用したい場合は、「警告 C4127」を直接無効にすることができます (プロジェクト プロパティ / C/C++ / 詳細設定 / 特定の警告を無効にする / 「4127」と入力)。

于 2012-06-04T08:45:38.450 に答える