Compartilhar via


C6328

Aviso C6328: <type>passado sistema autônomo parâmetro <number>Quando <type>é necessário chamar <função>

Para rotinas começando com é *, passando um argumento do tipo char pode levar a resultados imprevisíveis. Por exemplo, um SBCS ou MBCS caractere de um byte de tipo char com um valor maior que 0x7F é negativo. If a char é passado, o compilador pode converter o valor em uma assinatura int ou um assinado long. Esse valor pode ser estendido sinal pelo compilador, com resultados inesperados.Por exemplo, isspace aceita um argumento de tipo int; No entanto, o intervalo válido de valores para o argumento de entrada é:

0 <= c <= 255, além de especial valor EOF.

Exemplo

Por padrão, charé um tipo assinado no Visual C++, portanto, o intervalo de valores de uma variável do tipo char é -128 < = c < = 127. Portanto, se você fez o seguinte:

#include <iostream>

void f( )

{

char c = -37;

int retVal = isspace( c );

// code...

}

c poderia ser estendido de sinal para um int com um valor de-37, que está fora do intervalo válido de isspace.

Para correto esse problema use static_cast, sistema autônomo mostra o código a seguir:

#include <iostream>

void f( )
{
   char c = -37;
   int retVal = isspace( static_cast<unsigned char> (c) );
   // code...
}

Aviso C6328 existe especificamente para capturar esse bug.Caracteres no intervalo ASCII de 7 bit a conversão é desnecessário, mas fará com que caracteres fora desse intervalo declara e/ou falhas em time de execução.