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.