Erreur du compilateur C3850

'char' : un nom de caractère universel spécifie un caractère non valide

Notes

Les caractères représentés en tant que noms de caractères universels doivent représenter des points de code Unicode valides dans la plage 0-10FFFF. Un nom de caractère universel ne peut pas contenir une valeur dans la plage de substitution Unicode, D800-DFFF, ou une paire de substitution encodée. Le compilateur génère automatiquement la paire de substitution à partir d’un point de code valide.

Dans du code compilé en C, un nom de caractère universel ne peut pas représenter un caractère de la plage 0000-009F (plage inclusive), à l’exception de 0024 (« $ »), 0040 (« @ ») et 0060 (« ` »).

Dans du code compilé en C++, un nom de caractère universel peut utiliser n’importe quel point de code Unicode valide dans un littéral de chaîne ou de caractère. En dehors d’un littéral, un nom de caractère universel ne peut pas représenter un caractère de contrôle dans les plages 0000-001F ou 007F-009F (plages inclusives), ou un membre du jeu de caractères sources de base. Pour plus d’informations, consultez Character Sets.

Exemple

L’exemple suivant génère l’erreur C3850, et montre comment la corriger :

// C3850.cpp
int main() {
   int \u0019 = 0;   // C3850, not in allowed range for an identifier
   const wchar_t * wstr_bad  = L"\UD840DC8A"; // C3850, UCN is surrogate pair
   const wchar_t * wstr_good = L"\U0002008A"; // Okay, UCN is valid code point
}