C6328
C6328 de aviso: Incompatibilidade de tamanho: <tipo> passado como o número do parâmetro> <quando <o tipo> é exigido na chamada <para funcionar>
Para rotinas baseadas em tempo de execução C no nome da família isxxx(), passe um argumento de tipo char pode ter resultados imprevisíveis.Por exemplo, o caractere de byte único de SBCS ou de MBCS do tipo char com um valor maior que 0x7F for um valor negativo.Se char for passado, o compilador pode converter o valor a int assinado ou a longassinado.Esse valor pode sinal- ser estendido 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 assinado no Visual C++, assim que o intervalo de valores de uma variável de caracteres de tipo é -128 <= c <= 127.Em virtude disso, se você fez o seguinte:
#include <iostream>
void f( )
{
char c = -37;
int retVal = isspace( c );
// code ...
}
c sinal- será estendida a 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 seguinte código:
#include <iostream>
void f( )
{
char c = -37;
int retVal = isspace( static_cast<unsigned char> (c) );
// code ...
}
C6328 de aviso existe especificamente para capturar este bugs.Para caracteres ASCII 7 bits no varia a conversão é desnecessária a parte externa, mas os caracteres que o intervalo pode ter resultados imprevisíveis, até e incluindo a falha do programa e a conclusão.