Clarification: Given that a string literal can be rewritten as a const
char[]
(see below), imposing a lower max length on literals than on
char[]
s is just a syntactic inconvenience. Why does the C standard
encourage this?
The C89 standard has a translation limit for string literals:
509 characters in a character string literal or wide string literal (after concatenation)
There isn't a limit for a char arrays; perhaps
32767 bytes in an object (in a hosted environment only)
applies (I'm not sure what object or hosted environment means), but at any rate it's a much higher limit.
My understanding is that a string literal is equivalent to char array containing characters, ie: it's always possible to rewrite something like this:
const char* str = "foo";
into this
static const char __THE_LITERAL[] = { 'f', 'o', 'o', '' };
const char* str = __THE_LITERAL;
So why such a hard limit on literals?
See Question&Answers more detail:
os 与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…