C6328C6328

avertissement C6328 : incompatibilité de taille : <type > passé comme paramètre <nombre > lorsque <type > est requise dans l’appel à <fonction >warning C6328: Size mismatch: <type> passed as parameter <number> when <type> is required in call to <function>

Pour les routines de caractères C runtime dans le nom de famille is xxx(), en passant un argument de type char peut avoir des résultats imprévisibles.For C runtime character-based routines in the family name isxxx(), passing an argument of type char can have unpredictable results. Par exemple, un SBCS ou MBCS codés sur un caractère de type char avec une valeur supérieure à 0x7F est une valeur négative.For example, an SBCS or MBCS single-byte character of type char with a value greater than 0x7F is a negative value. Si un char est passé, le compilateur peut convertir la valeur connecté int ou connecté long.If a char is passed, the compiler might convert the value to a signed int or a signed long. Cette valeur peut être le signe étendu par le compilateur, avec des résultats inattendus.This value could be sign-extended by the compiler, with unexpected results. Par exemple, isspace accepte un argument de type int; Toutefois, la plage valide des valeurs d’argument d’entrée est :For example, isspace accepts an argument of type int; however, the valid range of values for its input argument is:

0 <= c <= 255, plus la valeur spéciale EOF.0 <= c <= 255, plus the special value EOF.

ExempleExample

Par défaut, char est un type dans Visual C++, par conséquent, la plage de valeurs d’une variable de type char est -128 <= c <= 127.By default, char is a signed type in Visual C++, so the range of values of a variable of type char is -128 <= c <= 127. Par conséquent, si vous avez effectué les éléments suivants :Therefore, if you did the following:

#include <iostream>  

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

c serait signe étendu à un signé int avec la valeur -37, qui est en dehors de la plage valide pour isspace.c would be sign-extended to a signed int with a value of -37, which is outside the valid range for isspace.

Pour corriger ce problème, vous pouvez utiliser static_cast, comme illustré dans le code suivant :To correct this problem, you can use static_cast, as shown in the following code:

#include <iostream>  

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

L’avertissement C6328 existe spécifiquement pour intercepter ce bogue.Warning C6328 exists specifically to catch this bug. La conversion des caractères dans la plage ASCII 7 bits n’est pas nécessaire, mais les caractères en dehors de cette plage peuvent avoir des résultats imprévisibles, jusque et y compris l’arrêt et l’erreur de programme.For characters in the 7-bit ASCII range the cast is unnecessary, but characters outside that range can have unpredictable results, up to and including program fault and termination.