Deutsch   English   Français   Italiano  
<vlm7o4$2dkpd$4@dont-email.me>

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

Path: ...!weretis.net!feeder9.news.weretis.net!news.quux.org!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail
From: Julio Di Egidio <julio@diegidio.name>
Newsgroups: comp.lang.c
Subject: Re: So You Think You Can Const?
Date: Wed, 8 Jan 2025 17:05:24 +0100
Organization: A noiseless patient Spider
Lines: 67
Message-ID: <vlm7o4$2dkpd$4@dont-email.me>
References: <vljvh3$27msl$1@dont-email.me> <20250107130809.661@kylheku.com>
 <vlm0hf$2dkpd$1@dont-email.me> <87a5c15ob0.fsf@bsb.me.uk>
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8; format=flowed
Content-Transfer-Encoding: 7bit
Injection-Date: Wed, 08 Jan 2025 17:05:24 +0100 (CET)
Injection-Info: dont-email.me; posting-host="2a46dd651168680e2ad36d621d0ac75a";
	logging-data="2544429"; mail-complaints-to="abuse@eternal-september.org";	posting-account="U2FsdGVkX1/UnP3jvBJF5g9CWMJLynmVG2jBQ7wjeJM="
User-Agent: Mozilla Thunderbird
Cancel-Lock: sha1:2l3cPcln31lNLRYrXZvilmg51q0=
In-Reply-To: <87a5c15ob0.fsf@bsb.me.uk>
Content-Language: en-GB
Bytes: 3775

On 08/01/2025 16:16, Ben Bacarisse wrote:
> Julio Di Egidio <julio@diegidio.name> writes:
>> On 07/01/2025 23:11, Kaz Kylheku wrote:
>>> On 2025-01-07, Julio Di Egidio <julio@diegidio.name> wrote:
<snipped>
>>>> To the question, I was reading this, but I am not
>>>> sure what the quoted passage means:
>>>>
>>>> Matt Stancliff, "So You Think You Can Const?",
>>>> <https://matt.sh/sytycc>
>>>> << Your compiler, at its discretion, may also choose
>>>>       to place any const declarations in read-only storage,
>>>>       so if you attempt to hack around the const blocks,
>>>>       you could get undefined behavior. >>
>>
>>> An object defined with a type that is const-qualified
>>> could be put into write-protected storage.
>>
>> What do you/we mean by "object" in this context?  (Sorry, I do have
>> forgotten, the glossary to begin with.)
> 
> An object (in C) is a contiguous region of storage, the contents of
> which can represent values.

Is that regardless of the stack/heap distinction, or is an "object" 
about heap-allocated/dynamic memory only?  --  Anyway, I should in fact 
re-acquaint myself with the language reference instead of asking this 
question.)

>> Overall, I am surmising this and only this might go write-protected:
>>
>>    MyStruct_t const T = {...};
> 
> Yes, though you should extend your concern beyond what might be
> write-protected.  Modifying an object whose type is const qualified is
> undefined, even if the object is in writable storage.

Yes, I am being a bit quick, but I definitely agree with that and indeed 
the priority of "defined behaviour" as a concern.

>> While this one allocates a "byte-array", i.e. irrespective of how the
>> pointer we are assigning it is declared:
>>
>>    MyStruct_t const *pT = malloc(...);
>>
>> Is my understanding (to that point) correct?
> 
> Technically you get an object with no effective type.

OK.

> More relevant to a discussion of const is to ask what you plan to do
> with pT since you can't (without a cast) assign any useful value to the
> allocated object.

Say my program unit implements AVL trees, with (conceptually speaking) 
constructors/destructors, navigation and retrieval, and of course 
manipulation (inserting, deleting, etc.).

My idea (but I would think this is pretty "canonical" and, if it isn't, 
I am missing the mark) is: my public functions take/give "sealed" 
instances (with const members to const data), as the user is not 
supposed to directly manipulate/edit the data, OTOH of course my 
implementation is all about in-place editing...

-Julio