Почему максимальная длина строкового литерала C отличается от max char []?
Clarification: Учитывая, что строковый литерал может быть переписан какconst
char[]
(см. ниже), устанавливая меньшую максимальную длину для литералов, чем для
char[]
Это просто синтаксическое неудобство. Почему стандарт С
поощрять это?
Стандарт C89 имеет ограничение на перевод строковых литералов:
509 characters in a character string literal or wide string literal (after concatenation)
Не существует предела для массивов символов; возможно
32767 bytes in an object (in a hosted environment only)
применяется (я не уверен, что означает объект или размещенная среда), но, во всяком случае, это намного более высокий предел.
Насколько я понимаю, строковый литерал эквивалентен массиву символов, содержащему символы, т. Е. Всегда можно переписать что-то вроде этого:
const char* str = "foo";
в это
static const char __THE_LITERAL[] = { 'f', 'o', 'o', '\0' };
const char* str = __THE_LITERAL;
Так почему такой жесткий предел для литералов?