Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail From: "Chris M. Thomasson" 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, 5 Aug 2024 13:35:28 -0700 Organization: A noiseless patient Spider Lines: 83 Message-ID: References: <20240801174026.00002cda@yahoo.com> <87zfpvfdk4.fsf@nosuchdomain.example.com> <87v80ig4vt.fsf@nosuchdomain.example.com> <87le1ed0dl.fsf@bsb.me.uk> <875xsfdbhf.fsf@bsb.me.uk> <87ttfzb5ar.fsf@bsb.me.uk> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Mon, 05 Aug 2024 22:35:28 +0200 (CEST) Injection-Info: dont-email.me; posting-host="8fb2bf3bc0b69bac1b2db0bf88076279"; logging-data="1114103"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1/03u2NwxaBJRHnVKcB8JtiUE2fxoZ+I54=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:Z9ejIOJWCguK1+HBfRR9u9LW2Fo= In-Reply-To: <87ttfzb5ar.fsf@bsb.me.uk> Content-Language: en-US Bytes: 4259 On 8/5/2024 4:03 AM, Ben Bacarisse wrote: > "Chris M. Thomasson" writes: > >> On 8/4/2024 6:06 PM, Ben Bacarisse wrote: >>> "Chris M. Thomasson" writes: >>> >>>> On 8/2/2024 3:29 PM, Ben Bacarisse wrote: >>>>> "Chris M. Thomasson" writes: >>>>> >>>>>> For some reason I had a sort of a habit wrt const pointers: >>>>>> >>>>>> (experimental code, no ads, raw text...) >>>>>> https://pastebin.com/raw/f52a443b1 >>>>>> >>>>>> ________________________________ >>>>>> /* Interfaces >>>>>> ____________________________________________________________________*/ >>>>>> #include >>>>>> >>>>>> >>>>>> struct object_prv_vtable { >>>>>> int (*fp_destroy) (void* const); >>>>>> }; >>>>>> >>>>>> >>>>>> struct device_prv_vtable { >>>>>> int (*fp_read) (void* const, void*, size_t); >>>>>> int (*fp_write) (void* const, void const*, size_t); >>>>>> }; >>>>> Why? It seems like an arbitrary choice to const qualify some pointer >>>>> types and some pointed-to types (but never both). >>>> >>>> I just wanted to get the point across that the first parameter, aka, akin >>>> to "this" in C++ is a const pointer. Shall not be modified in any way shape >>>> or form. It is as it is, so to speak: >>>> >>>> void foo(struct foobar const* const self); >>>> >>>> constant pointer to a constant foobar, fair enough? >>> No. If you intended a const pointer to const object why didn't you >>> write that? My point was that the consts seems to be scattered about >>> without any apparent logic and you've not explained why. >>> >>>>>> ;^) >>>>> Does the wink mean I should not take what you write seriously? If so, >>>>> please ignore my question. >>>> >>>> The wink was meant to show my habit in basically a jestful sort of >>>> way. >>> Your habit of what? >> >> To write the declaration with names and the const access I want, so: >> >> extern void (void const* const ptr); >> >> void (void const* const ptr) >> { >> // ptr is a const pointer to a const void >> } > > I don't think you are following what I'm, saying. If you think there > might be some value in finding out, you could as a few questions. I > won't say it again ;-) > I must be misunderstanding you. My habit in such code was to always make the "this" pointer wrt some of my "object" oriented code a const pointer. This was always the first parameter: extern void foobar(void const* const ptr); or extern void foobar(void* const ptr); Actually, I used the name of self for a while. extern void foobar(void const* const self); extern void foobar(void* const self);