C6328
upozornění C6328: Neshoda mezi: <type> předaný jako parametr <number> Při <type> je vyžadován při volání <function>
Pro C runtime pracující rutin v názvu řady isxxx(), předáním argument typu char může mít nepředvídatelné následky.Například Jednobajtové znakové sady MBCS jednobajtové znak nebo typu char s hodnotou vyšší než 0x7F zápornou hodnotu.Pokud char je předán, kompilátor může převést hodnotu podepsané int nebo podepsané long.Tato hodnota může být s rozšířeným kompilátorem s neočekávanými výsledky.Například isspace přijímá argument typu int; platný rozsah hodnot pro vstupní argument je však:
0 <= c <= 255, plus speciální hodnotu EOF.
Příklad
Ve výchozím nastavení char je podepsané typ v aplikaci Visual C++, tak rozsah hodnot proměnné typu char je -128 <= c <= 127.Proto pokud jste provedli následující:
#include <iostream>
void f( )
{
char c = -37;
int retVal = isspace( c );
// code ...
}
cby byly rozšířeny na podepsané int s hodnotou-37, což je mimo platný rozsah pro isspace.
Chcete-li tento problém vyřešit, můžete použít static_cast, jak je ukázáno v následujícím kódu:
#include <iostream>
void f( )
{
char c = -37;
int retVal = isspace( static_cast<unsigned char> (c) );
// code ...
}
Upozornění C6328 existuje speciálně k zachycení tuto chybu.Znaky v rozsahu ASCII 7bitové přetypování je zbytečné, ale znaky mimo tento rozsah může mít nepředvídatelné následky, až po a včetně programu poruchy a ukončení.