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