Compartilhar via


C6328

Aviso C6328: <type> passado como o parâmetro <number> Quando <type> é necessário chamar <function>

Para rotinas começando é *, passando um argumento do tipo char pode gerar resultados imprevisíveis. Por exemplo, um SBCS ou MBCS caracteres de um byte de tipo char com um valor maior que 0x7F é negativo. Se um char é passado, o compilador pode converter o valor para um int ou um assinado long. Esse valor poderia ser estendido de sinal pelo compilador, com resultados inesperados. Por exemplo, isspace aceita um argumento do 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 de assinado no Visual C++, portanto, o intervalo de valores de uma variável do tipo char é de -128 < = c < = 127. Portanto, se você fez o seguinte:

#include <iostream>

void f( )

{

char c = -37;

int retVal = isspace( c );

// code...

}

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

Para corrigir esse problema de uso static_cast, conforme mostrado no 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 bits a projeção é desnecessário, mas fará com que os caracteres fora desse intervalo declara e/ou falhas em tempo de execução.