Compartir a través de


C6328

Actualización: noviembre 2007

C6328

Advertencia C6328: <tipo> pasado como parámetro <número> cuando <tipo> es necesario para llamar a <función>

Para las rutinas que se inician con is*, al pasar un argumento de tipo char, se podrían producir resultados imprevisibles. Por ejemplo, un carácter de un solo byte de SBCS o MBCS de tipo char con un valor mayor que 0x7F es 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 manera predeterminada, char es un tipo con signo en Visual C++, de manera que el intervalo de valores del 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, utilice 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. Para los caracteres comprendidos en el intervalo ASCII de 7 bits, la conversión de tipos es innecesaria, pero los caracteres que se encuentran fuera de ese intervalo provocarán aserciones y/o bloqueos en tiempo de ejecución.