Warum unterscheidet sich die maximale Länge von C-String-Literalen von max char []?

Klärung: Vorausgesetzt, ein String-Literal kann alsconst char[] (siehe unten), wobei Literalen eine geringere maximale Länge als Literalen auferlegt wirdchar[]s ist nur eine syntaktische Unannehmlichkeit. Warum fördert der C-Standard dies?

Der C89-Standard hat ein Übersetzungslimit für String-Literale:

509 Zeichen in einem Zeichenkettenliteral oder einem Wide-String-Literal (nach der Verkettung)

Es gibt keine Begrenzung für Char-Arrays. vielleicht

32767 Byte in einem Objekt (nur in einer gehosteten Umgebung)

trifft zu (ich bin nicht sicher, was Objekt oder gehostete Umgebung bedeutet), aber es ist auf jeden Fall eine viel höhere Grenze.

Ich verstehe, dass ein String-Literal einem Zeichen-Array entspricht, das Zeichen enthält, dh, es ist immer möglich, so etwas umzuschreiben:

const char* str = "foo";

das sehr gut finden

static const char __THE_LITERAL[] = { 'f', 'o', 'o', '\0' };
const char* str = __THE_LITERAL;

Warum also so eine harte Grenze für Literale?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage