C6328
C6328 de aviso: Incompatibilidade de tamanho: <type> passado como parâmetro <number> quando <type> é necessário na chamada a <function>
Para o tempo de execução de caracteres C rotinas com base no nome da família isxxx(), passando um argumento de tipo char podem ter resultados imprevisíveis.Por exemplo, o caractere de byte único SBCS ou MBCS do tipo char com um valor maior que 0x7F é um valor negativo.Se char é passado, o compilador pode converter o valor a int sinal ou a longassinado.Esse valor pode ser estendido logon pelo compilador, com resultados inesperados.Por exemplo, isspace aceita um argumento de tipo int; no entanto, o intervalo de valores válido para o argumento de entrada é:
0 <= c <= 255, mais o valor especial EOF.
Exemplo
Por padrão, char é um sinal tipos em Visual C++, o intervalo de valores de uma variável char de tipo é -128 <= c <= 127.Portanto, se você fez o seguinte:
#include <iostream>
void f( )
{
char c = -37;
int retVal = isspace( c );
// code ...
}
c logon seria estendido para int assinado com um valor de -37, que está fora do intervalo válido para isspace.
Para corrigir esse problema, você pode usar static_cast, conforme mostrado no código o seguir:
#include <iostream>
void f( )
{
char c = -37;
int retVal = isspace( static_cast<unsigned char> (c) );
// code ...
}
C6328 de aviso existe especificamente para capturar este erro.Para 7 caracteres ASCII no bit da conversão é a fora desnecessária, mas os caracteres que o intervalo pode ter resultados imprevisíveis, até e incluindo a falha de programa e o encerramento.