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 */