Почему максимальная длина строкового литерала 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;

Так почему такой жесткий предел для литералов?

Ответы на вопрос(3)

Ваш ответ на вопрос