Compartilhar via


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.