| Christopher Smith on 1 Oct 2003 05:10:17 -0000 |
[Date Prev] [Date Next] [Thread Prev] [Thread Next] [Date Index] [Thread Index]
| Re: [ALACPP] Why won't g++ tell me I'm dumb? |
On Tue, 2003-09-30 at 21:42, Josh Dybnis wrote:
> Technically gcc is doing the right thing here. String literals aren't
> actually constants. It's pretty obscure. I had to actually bust out the
> standard on this. What it says is that string literals are static
> arrays of type char, not const char. Attempting to modify a string
> literal is "undefined", but it's not actually forbidden for an
> implementation to support it. This is from the C standard, but I assume
> that C++ retains this for compatibility.
Out of curiosity, is this from the C89 or C99 standard?
I thought the relevant section of the gcc info page would help give you
guys an idea as to why Kevin and I were surprised by this behavior:
`-fno-const-strings'
Give string constants type `char *' instead of type `const char
*'. By default, G++ uses type `const char *' as required by the
standard. Even if you use `-fno-const-strings', you cannot
actually modify the value of a string constant, unless you also use
`-fwritable-strings'.
This option might be removed in a future release of G++. For
maximum portability, you should structure your code so that it
works with string constants that have type `const char *'.
FYI, doing "-fwritable-strings" does of course fix this problem.
--
Christopher Smith <x@xxxxxxxx>
_______________________________________________
alacpp mailing list
alacpp@xxxxxxxxxxx
http://lists.ellipsis.cx/mailman/listinfo/alacpp