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.