Freigeben über


C6328

Warnung C6328: Größenkonflikt: <type> weitergegebenen als Parameter <number>, wenn <type> im Aufruf von <function>erforderlich ist

Für zeichenbasierte AblaufRoutinen C-Code im Kategorienamen isxxx(), kann das Übergeben eines Arguments des Typs char unvorhersehbare Ergebnisse haben.Beispielsweise ist ein SBCS- oder MBCS-Einzelbytezeichen des Typs char mit einem Wert, der größer als 0x7F ist, ein negativer Wert.Wenn char übergeben wird, wandelt der Compiler den Wert möglicherweise in int mit Vorzeichen oder long mit Vorzeichen um.Wenn der Compiler diesen Wert mit einem Vorzeichen versieht, kann dies zu unerwarteten Ergebnissen führen.So akzeptiert z. B. isspace ein Argument des Typs int, der gültige Wertebereich des Eingabearguments lautet jedoch folgendermaßen:

0 <= c <= 255, plus den speziellen Wert EOF.

Beispiel

Standardmäßig ist char in Visual C++ ein mit Vorzeichen, sodass der Wertebereich einer Variablen des Typs char -128 <= c <= 127.Daher gehen Sie folgendermaßen vor:

#include <iostream>

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

In diesem Fall wird mit c einem Vorzeichen versehen, sodass int mit Vorzeichen und einem Wert von -37 entsteht, der außerhalb des gültigen Bereichs für isspace liegt.

Um dieses Problem zu beheben, können Sie static_cast, wie im folgenden Code dargestellt:

#include <iostream>

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

Warnung C6328 ist speziell darauf ausgerichtet, dieses Problem abzufangen.Für Zeichen im 7-Bit-ASCII-Bereich ist die Umwandlung unnötige, aber Zeichenaußenseite, der Bereich unvorhersehbare Ergebnisse haben kann, einschließlich Programmierfehler und beenden.