Sdílet prostřednictvím


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í.