¿Por qué la longitud máxima de la cadena C literal es diferente de max char []?
Aclaración: Dado que una cadena literal puede ser reescrita como unconst char[]
(ver más abajo), imponiendo una longitud máxima más baja en literales que enchar[]
s es solo un inconveniente sintáctico. ¿Por qué el estándar C fomenta esto?
El estándar C89 tiene un límite de traducción para los literales de cadena:
509 caracteres en un literal de cadena de caracteres o literal de cadena ancha (después de la concatenación)
No hay un límite para una matriz de caracteres; quizás
32767 bytes en un objeto (solo en un entorno alojado)
se aplica (no estoy seguro de qué significa objeto o entorno alojado), pero en todo caso es un límite mucho más alto.
Tengo entendido que una cadena literal es equivalente a una matriz de caracteres que contiene caracteres, es decir: siempre es posible reescribir algo como esto:
const char* str = "foo";
dentro de esto
static const char __THE_LITERAL[] = { 'f', 'o', 'o', '\0' };
const char* str = __THE_LITERAL;
Entonces, ¿por qué un límite tan duro en los literales?