Compartilhar via


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.