Ist '\ u0B95' ein Literal mit mehreren Zeichen?

Imeine frühere Antwort gab ichIch antwortete auf die folgende Warnung, die dadurch verursacht wurde, dass'\u0B95' benötigt drei Bytes und so ist aMehrzeichen-Literal:

warning: multi-character character constant [-Wmultichar]

Aber eigentlich glaube ich nicht, dass ich Recht habe, und ich glaube auch nicht, dass GCC das ist. Der Standard besagt:

Ein gewöhnliches Zeichenliteral, das mehr als ein Zeichen enthältc-char ist einMehrzeichen-Literal.

Eine Produktionsregel fürc-char ist einUniversalzeichenname (d. h.\uXXXX oder\UXXXXXXXX). Schon seit\u0B95 ist eine Singlec-charDies ist kein Mehrzeichen-Literal. Aber jetzt wird es chaotisch. Der Standard sagt auch:

Ein gewöhnliches Zeichenliteral, das eine einzelne enthältc-char hat Typcharmit einem Wert, der dem numerischen Wert der Codierung desc-char im Ausführungszeichensatz.

Also mein Wortlaut hat Typchar und Wert des Zeichens im Ausführungszeichensatz (oder implementierungsdefinierter Wert, wenn er in diesem Satz nicht vorhanden ist).char wird nur so definiert, dass es groß genug ist, um ein Element des Basiszeichensatzes zu speichern (der vom Standard nicht definiert wird, aber ich gehe davon aus, dass dies den Basisausführungszeichensatz bedeutet):

Objekte, die als Zeichen (char) deklariert sind, müssen groß genug sein, um ein Mitglied des Basiszeichensatzes der Implementierung zu speichern.

Da der Ausführungszeichensatz eine Obermenge aller Werte a istchar kann halten, mein Charakter passt möglicherweise nicht in diechar.

Also welchen Werttut meinechar haben? Dies scheint nirgends definiert zu sein. Der Standard sagt das fürchar16_t Literale, wenn der Wert nicht darstellbar ist, ist das Programm schlecht geformt. Es sagt jedoch nichts über gewöhnliche Literatur aus.

So was ist los? Ist das nur ein Chaos in der Norm oder fehle ich etwas?

Antworten auf die Frage(4)

Ihre Antwort auf die Frage