Liste des Groupes | Revenir à cl c |
On 13/08/2024 01:05, Tim Rentsch wrote:Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:>Tim Rentsch <tr.17687@z991.linuxsc.com> writes:Good point. I hadn't considered such cases.Keith Thompson <Keith.S.Thompson+u@gmail.com> writes:>candycanearter07 <candycanearter07@candycanearter07.nomail.afraid>>
writes:David Brown <david.brown@hesbynett.no> wrote at 17:56 this Thursday (GMT):[...]
>>gcc has the option "-Wwrite-strings" that makes string literals in>
C have "const char" array type, and thus give errors when you try
to assign to a non-const char * pointer. But the option has to be
specified explicitly (it is not in -Wall) because it changes the
meaning of the code and can cause compatibility issues with
existing correct code.
-Wwrite-strings is included in -Wpedantic.
No it isn't, nor is it included in -Wall -- and it wouldn't make
sense to do so.
>
The -Wpedantic option is intended to produce all required
diagnostics for the specified C standard. -Wwrite-strings
gives string literals the type `const char[LENGTH]`, which
enables useful diagnostics but is *non-conforming*.
As long as the -Wwrite-strings diagnostics are only warnings the
result is still conforming.
It's not just about diagnostics. This program:
>
#include <stdio.h>
int main(void) {
puts(_Generic("hello",
char*: "char*",
const char*: "const char*",
default: "?"));
}
>
must print "char*" in a conforming implementation. With
(gcc|clang) -Wwrite-strings, it prints "const char*".
And something as simple as:That violates the "As long as the -Wwrite-strings diagnostics are
>
char *p = "hello";
>
is rejected with a fatal error with "-Wwrite-strings -pedantic-errors".
only warnings" condition.
Indeed.
>
I personally think it is nice to have an option to make string
literals "const" in C, even though it is non-conforming. I also think
it is very useful to have a warning on attempts to write to string
literals. But I think gcc has made a mistake here by conflating the
two. I'd rather see the warning being enabled by default (or at least
in -Wall), while the "make string literals const" option should
require an explicit flag and be a "-f" flag rather than a "-W" flag.
The current situation seems to be a quick-and-dirty way to get the
warning.
>
Other people may have different opinions, of course :-)
Les messages affichés proviennent d'usenet.