C6236
Aviso C6236: (<expression> || < diferente de zero constante >) é sempre uma constante diferente de zero
Este aviso indica que um valor constante de zero, diferente, foi detectado no lado direito de uma lógica- ou operação ocorre em um contexto de teste. O lado esquerdo da lógica- ou operação não será avaliada porque a expressão resultante sempre avaliada como true. Isso é conhecido como "avaliação de circuito curto."
Um valor constante diferente sugere que o bit a bit- E operador (&) podem ter sido pretendido. Este aviso não é gerado para o idioma comum quando a constante diferente de zero é 1, por causa de seu uso para habilitar seletivamente os caminhos de código, mas ele é gerado se a constante diferente de zero é avaliado como 1, por exemplo 1 + 0.
Exemplo
No código a seguir, n + + não é avaliada como INPUT_TYPE for maior que 1:
#define INPUT_TYPE 2
#include <stdio.h>
void f( int n )
{
// side effect: n not incremented
if( n++ || INPUT_TYPE ) //warning 6236 issued
{
puts( "Always gets here" );
}
else
{
puts( "Never enters here" );
}
}
O código a seguir usa o bit a bit- E (&)o operador para corrigir este aviso:
#define INPUT_TYPE 2
#include <stdio.h>
void f( int n )
{
if( n++ & INPUT_TYPE )
{
puts( "Bitwise-AND comparison is true" );
}
else
{
puts( "Bitwise-AND comparison is false" );
}
}