Deutsch English Français Italiano |
<871q2tiffa.fsf@nosuchdomain.example.com> View for Bookmarking (what is this?) Look up another Usenet article |
Path: ...!weretis.net!feeder8.news.weretis.net!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: Keith Thompson <Keith.S.Thompson+u@gmail.com> Newsgroups: comp.lang.c Subject: Re: No warning at implicit removal of const. Was: relearning C: why does an in-place change to a char* segfault? Date: Mon, 12 Aug 2024 14:45:13 -0700 Organization: None to speak of Lines: 49 Message-ID: <871q2tiffa.fsf@nosuchdomain.example.com> References: <IoGcndcJ1Zm83zb7nZ2dnZfqnPWdnZ2d@brightview.co.uk> <20240801174026.00002cda@yahoo.com> <v8gi7i$29iu1$1@dont-email.me> <slrnvaorkl.34j6.candycanearter07@candydeb.host.invalid> <87zfpvfdk4.fsf@nosuchdomain.example.com> <86ttfp2zpf.fsf@linuxsc.com> MIME-Version: 1.0 Content-Type: text/plain Injection-Date: Mon, 12 Aug 2024 23:45:14 +0200 (CEST) Injection-Info: dont-email.me; posting-host="95de69de4fa23f7b87735178c0e02b79"; logging-data="3661514"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/LM1WROtuG6dlWwgwuV4Qx" User-Agent: Gnus/5.13 (Gnus v5.13) Cancel-Lock: sha1:IxnQbRHn8gsfKPMqivtqPPERBZI= sha1:M5RkjUxS8j3Jy3BgiigrE1g9BsY= Bytes: 3011 Tim Rentsch <tr.17687@z991.linuxsc.com> writes: > 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: char *p = "hello"; is rejected with a fatal error with "-Wwrite-strings -pedantic-errors". -- Keith Thompson (The_Other_Keith) Keith.S.Thompson+u@gmail.com void Void(void) { Void(); } /* The recursive call of the void */