警告 C6236
('expression' ||'non-zero constant') は常に 0 以外の定数です
この警告は、テスト コンテキストで発生する論理 OR 演算の右辺で、1 以外の 0 でない定数値が検出されたことを示します。 論理的には、テストは冗長であり、安全に削除できることを意味します。 また、プログラマが特定の値またはフラグをテストするために、異なる演算子 (等価比較 (==
)、ビットごとの AND (&
)、ビットごとの XOR (^
) 演算子など) を想定した可能性があることも示しています。
解説
この警告は、コンパイル時にコード パスを選択的に有効にするために使用されるため、0 以外の定数が 1 の場合、共通のイディオムに対しては生成されません。 ただし、0 以外の定数が 1 に評価される式 (たとえば、1 + 0) によって形成されている場合、警告が生成されます。
コード分析名: LOGICALORNONZERO
例
このコードは、警告 C6236 を表示させる方法を示しています。 INPUT_TYPE
0 ではないので、式n || INPUT_TYPE
は常に 0 以外でありelse
、句は実行されません。 ただし、 INPUT_TYPE
1 以外の値を持つ定数は、比較の値として意味されることを示唆します。
#define INPUT_TYPE 2
#include <stdio.h>
void f( int n )
{
if ( n || INPUT_TYPE ) // analysis warning C6236
{
puts( "Always gets here" );
}
else
{
puts( "Never enters here" );
}
}
次のコードでは、代わりにビットごとの AND (&
) 演算子を使用して、入力パラメーター n
の INPUT_TYPE
ビットが設定されているかどうかをテストします。
#define INPUT_TYPE 2
#include <stdio.h>
void f( int n )
{
if ( n & INPUT_TYPE ) // no warning
{
puts( "Bitwise-AND comparison is true" );
}
else
{
puts( "Bitwise-AND comparison is false" );
}
}
関連項目
フィードバック
https://aka.ms/ContentUserFeedback」を参照してください。
以下は間もなく提供いたします。2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub の issue を段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、「フィードバックの送信と表示