Dlaczego maksymalna długość literału C różni się od max char []?

Wyjaśnienie: Biorąc pod uwagę, że literał ciągu można przepisać jakoconst char[] (patrz poniżej), nakładając niższą maksymalną długość na literały niż nachar[]s to tylko niedogodność składniowa. Dlaczego standard C to zachęca?

Standard C89 ma limit tłumaczenia dla literałów ciągów:

509 znaków w dosłownym łańcuchu znaków lub w szerokim literale łańcuchowym (po konkatenacji)

Nie ma limitu dla tablic char; być może

32767 bajtów w obiekcie (tylko w środowisku hostowanym)

dotyczy (nie jestem pewien, co oznacza obiekt lub hostowane środowisko), ale w każdym razie jest to znacznie wyższy limit.

Rozumiem, że literał łańcuchowy jest równoważny tablicy char zawierającej znaki, tj .: zawsze można przepisać coś takiego:

const char* str = "foo";

zaangażowany w to

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

Dlaczego więc taki twardy limit literałów?

questionAnswers(3)

yourAnswerToTheQuestion