Udostępnij za pośrednictwem


C6328

Ostrzeżenie C6328: nieprawidłowy rozmiar: <type> przekazane jako parametr <number> gdy <type> jest wymagany w wywołaniu <function>

Dla C runtime znakowym procedur nazwisko isxxx(), przekazując argument typu char może mieć nieprzewidywalne skutki.Na przykład SBCS lub MBCS znaków jednobajtowych typu char o wartości większej niż 0x7F jest wartością ujemną.Jeśli char jest przekazywana, kompilator może przekonwertować wartość podpisanego przez nią int lub long.Ta wartość może być przedłużony znak przez kompilator, nieoczekiwane wyniki.Na przykład isspace akceptuje argument typu int; Jednakże jest prawidłowy zakres wartości dla jego argument wejściowy:

0 <= c <= 255, plus specjalna wartość EOF.

Przykład

Domyślnie char podpisanego przez nią wpisać w programie Visual C++, więc zakres wartości zmiennej typu char jest -128 <= c <= 127.W związku z tym jeśli nie są następujące:

#include <iostream>

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

cbyłoby znak rozszerzony do podpisanego przez nią int o wartości-37, który nie jest prawidłowy zakres dla isspace.

Aby rozwiązać ten problem, można użyć static_cast, jak pokazano w poniższym kodzie:

#include <iostream>

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

Ostrzeżenie C6328 istnieje w szczególności, aby wychwycić ten błąd.Dla znaków z zakresu ASCII 7-bitowe obsady nie jest konieczne, ale znaki wykracza poza ten zakres może mieć nieprzewidywalne skutki, w tym usterki programu, jak i zakończenie.