C6400
Mise à jour : novembre 2007
C6400
Avertissement C6400 : Utilisation de <NomFonction> en vue d'effectuer une comparaison ne tenant pas compte de la casse avec la chaîne constante <NomChaîne>. Donne des résultats inattendus avec les paramètres régionaux autres que l'anglais
Cet avertissement indique qu'une comparaison ne respectant pas la casse et dépendante des paramètres régionaux est effectuée avec une chaîne constante, alors qu'une comparaison indépendante des paramètres régionaux était apparemment prévue.
La conséquence classique de ce défaut est un comportement incorrect des paramètres régionaux autres que l'anglais. Par exemple, ".gif" ne correspond pas à ".GIF" en turc ; "LogIn" ne correspond pas à "LOGIN" en vietnamien.
En général, les comparaisons de chaînes doivent être exécutées à l'aide de la fonction CompareString. Pour effectuer une comparaison indépendante des paramètres régionaux sur Windows XP, le premier paramètre doit correspondre à la constante LOCALE_INVARIANT.
Exemple
Le code suivant génère cet avertissement :
#include <windows.h>
int f(char *ext)
{
// code...
return (lstrcmpi(ext, TEXT("gif")) == 0);
}
Pour corriger cet avertissement, exécutez un test indépendant des paramètres régionaux pour déterminer si char *ext correspond à "gif" en ignorant les différences de casse entre les majuscules et les minuscules, à l'aide du code suivant :
#include <windows.h>
int f(char *ext)
{
// code...
return (CompareString(
LOCALE_INVARIANT,
NORM_IGNORECASE,
ext,
-1,
TEXT ("gif"),
-1) == CSTR_EQUAL);
}