Deutsch   English   Français   Italiano  
<v8rd2g$11vvn$2@dont-email.me>

View for Bookmarking (what is this?)
Look up another Usenet article

Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!.POSTED!not-for-mail
From: "Chris M. Thomasson" <chris.m.thomasson.1@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, 5 Aug 2024 13:35:28 -0700
Organization: A noiseless patient Spider
Lines: 83
Message-ID: <v8rd2g$11vvn$2@dont-email.me>
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> <v8ii17$2q5p1$1@dont-email.me>
 <87v80ig4vt.fsf@nosuchdomain.example.com> <v8jbvj$2vat1$1@dont-email.me>
 <87le1ed0dl.fsf@bsb.me.uk> <v8jp3f$321h8$1@dont-email.me>
 <875xsfdbhf.fsf@bsb.me.uk> <v8pdsn$fgau$1@dont-email.me>
 <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" <chris.m.thomasson.1@gmail.com> writes:
> 
>> On 8/4/2024 6:06 PM, Ben Bacarisse wrote:
>>> "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> writes:
>>>
>>>> On 8/2/2024 3:29 PM, Ben Bacarisse wrote:
>>>>> "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> 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 <stddef.h>
>>>>>>
>>>>>>
>>>>>> 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);