Por que o tamanho máximo do literal da string C é diferente do max char []?

Esclarecimento: Dado que uma string literal pode ser reescrita como umconst char[] (veja abaixo), impondo um comprimento máximo menor em literais do que emchar[]s é apenas um inconveniente sintático. Por que o padrão C encoraja isso?

O padrão C89 tem um limite de tradução para literais de string:

509 caracteres em um literal de cadeia de caracteres ou literal de cadeia larga (após a concatenação)

Não há limite para matrizes de caracteres; possivelmente

32767 bytes em um objeto (somente em um ambiente hospedado)

aplica (não tenho certeza qual objeto ou ambiente hospedado significa), mas de qualquer forma é um limite muito maior.

Meu entendimento é que uma string literal é equivalente a caracteres contendo caracteres char, ou seja: é sempre possível reescrever algo assim:

const char* str = "foo";

nisso

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

Então, por que um limite tão duro em literais?

questionAnswers(3)

yourAnswerToTheQuestion