Разъяснение. Учитывая, что строковый литерал можно переписать как const
char[]
(см. ниже), накладывая меньшую максимальную длину на литералы, чем на
char[]
- это просто синтаксическое неудобство. Почему стандарт C
поощрять это?
В стандарте C89 есть предел перевода для строковых литералов:
509 символов в литеральном литерале или в строковой литературе (после конкатенации)
Нет ограничений для массивов char; возможно
32767 байт в объекте (только в размещенной среде)
(я не уверен, что означает объект или размещенная среда), но во всяком случае это гораздо более высокий предел.
Я понимаю, что строковый литерал эквивалентен массиву char, содержащему символы, т.е. всегда можно переписать что-то вроде этого:
const char* str = "foo";
в этот
static const char __THE_LITERAL[] = { 'f', 'o', 'o', '\0' };
const char* str = __THE_LITERAL;
Итак, почему такой жесткий предел для литералов?