C6328

Aktualisiert: November 2007

C6328

Warnung C6328: <Typ> wurde als <Nummer>-Parameter übergeben. <Typ> ist jedoch im Aufruf von <Funktion> erforderlich.

Für Routinen, die mit is* beginnen, kann die Übergabe eines Arguments des Typs char unvorhersehbare Folgen haben. So ist beispielsweise ein SBCS- oder MBCS-Einzelbytezeichen des Typs char mit einem Wert größer als 0x7F negativ. 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 Spezialwert EOF

Beispiel

Standardmäßig ist char in Visual C++ ein Typ mit Vorzeichen, sodass der Wertebereich einer Variablen des Typs char -128 <= c <= 127 lautet. Beispiel:

#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, verwenden 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 keine Umwandlung erforderlich, Zeichen außerhalb dieses Bereich führen jedoch zu Assertionen und/oder Abstürzen zur Laufzeit.