Deutsch English Français Italiano |
<vlmvb7$3023s$5@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: "Chris M. Thomasson" <chris.m.thomasson.1@gmail.com> Newsgroups: comp.lang.c Subject: Re: So You Think You Can Const? Date: Wed, 8 Jan 2025 14:48:06 -0800 Organization: A noiseless patient Spider Lines: 72 Message-ID: <vlmvb7$3023s$5@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> <vlm7o4$2dkpd$4@dont-email.me> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit Injection-Date: Wed, 08 Jan 2025 23:48:08 +0100 (CET) Injection-Info: dont-email.me; posting-host="58961ca7b8547b951e6a06d5f950f196"; logging-data="3147900"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+Z9GQ6oqrpFOp0diJA2zOw6hB8b8Shgss=" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:BZqR52Jiz71IHW3KJRdKH9A+5CQ= Content-Language: en-US In-Reply-To: <vlm7o4$2dkpd$4@dont-email.me> Bytes: 4116 On 1/8/2025 8:05 AM, Julio Di Egidio wrote: > 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... Off topic, but for some reason you are making me think of the mutable keyword in C++: https://en.cppreference.com/w/cpp/language/cv ;^)