Compartir a través de


C6328

C6328 de advertencia: No coincide el tamaño: <type> pasado como parámetro <number> cuando <type> se requiere en una llamada a <function>

Para las rutinas carácter- basadas en tiempo de ejecución de C en el apellido isxxx(), pasar un argumento de char escrito puede producir resultados imprevisibles.Por ejemplo, el carácter de solo- byte de SBCS o MBCS de char escrito con un valor mayor que 0x7F es un valor negativo.Si se pasa char, el compilador podría convertir el valor en un int con signo o un longcon signo.El compilador podría agregar a este valor la extensión de signo, lo que provocaría resultados inesperados.Por ejemplo, isspace acepta un argumento de tipo int; sin embargo, el intervalo válido de valores para su argumento de entrada es:

0 <= c <= 255, más el valor especial EOF.

Ejemplo

De forma predeterminada, char es un tipo con signo en Visual C++, por lo que el intervalo de valores de una variable de tipo char es -128 <= c <= 127.En consecuencia, si hiciera lo siguiente:

#include <iostream>

void f( )
{
    char c = -37;
    int retVal = isspace( c );
    // code ...
}

Se agregaría a c la extensión de signo para convertirlo en un int con signo cuyo valor sería -37, que está fuera del intervalo válido para isspace.

Para corregir este problema, puede utilizar static_cast, como se muestra en el código siguiente:

#include <iostream>

void f( )
{
    char c = -37;
    int retVal = isspace( static_cast<unsigned char> (c) );
    // code ...
}

La advertencia C6328 se ha creado específicamente para detectar este error.Por caracteres de los 7 bits el intervalo ASCII que la conversión es innecesaria, sólo fuera de los caracteres que el intervalo puede producir resultados imprevisibles, hasta e incluyendo el error y la finalización del programa.