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?