Path: ...!eternal-september.org!feeder3.eternal-september.org!news.eternal-september.org!eternal-september.org!.POSTED!not-for-mail From: bart Newsgroups: comp.lang.c Subject: Re: Results of survey re. a new array size operator Date: Wed, 29 Jan 2025 11:45:47 +0000 Organization: A noiseless patient Spider Lines: 60 Message-ID: References: <87a5bgsnql.fsf@gmail.com> <20250124135623.00004479@yahoo.com> <20250124115250.760@kylheku.com> <20250124165243.678@kylheku.com> <868qqu2bnl.fsf@linuxsc.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Injection-Date: Wed, 29 Jan 2025 12:45:49 +0100 (CET) Injection-Info: dont-email.me; posting-host="fe5acb5daa660a423a0df63b282d0d90"; logging-data="2484907"; mail-complaints-to="abuse@eternal-september.org"; posting-account="U2FsdGVkX1+GfvOVq+7vWBPlFDPOlZQf" User-Agent: Mozilla Thunderbird Cancel-Lock: sha1:LILzAb0OyqXIevJNBTeIIig2/OE= Content-Language: en-GB In-Reply-To: <868qqu2bnl.fsf@linuxsc.com> Bytes: 3251 On 29/01/2025 09:48, Tim Rentsch wrote: > Kaz Kylheku <643-408-1753@kylheku.com> writes: > >> On 2025-01-24, Scott Lurndal wrote: >> >>> Kaz Kylheku <643-408-1753@kylheku.com> writes: >>> >>>> On 2025-01-24, Scott Lurndal wrote: >>>> You can define >>>> >>>> #define arraysize (x) (sizeof (x) / sizeof ((x)[0)) >>> >>> You can, but you don't need to. >> >> The repetition in things like: >> >> sizeof foo->bar.buf / *sizeof foo->bar.buf >> >> is just irksome. Why do I have to say that thing twice, >> to get its number of elements? >> >>> Often readability suffers >>> when you use macros, not to mention the other quirks of >>> C macro use (in C++, a constexpr function might be >>> suitable, but the naming being arbitrary (e.g. arraysize, >>> NUM_ELEMENTS, SIZE, et alia) doesn't aid in readability >>> or maintainability. >> >> The naming being arbitrary is the argument for standardizing the >> name for the macro and sticking it into, for instance, . >> >> If we didn't have offsetof there, we might have to deal with >> OFFSETOF, offsetof, offset, member_offset, and others. > > That's a flawed analogy. A macro to compute the number of > elements in an array can be done in standard C. The > functionality of offsetof cannot be done in standard C, and > that's what it needs to be in the standard library. Can't it? The various versions I've seen, including mine, look like this: #define offsetof(a,b) (size_t) &( ((a*)0) -> b) As for the other point that was made, when looking at open source code, every other program seems to contain macros like MAX ARRAYLEN STREQ But with assorted spellings (the first program I looked at today used MZ_MAX). However, every other program also seems to use typedefs to define their own versions of INT32 etc, even with stdint.h type being available for 25 years. So being in the standard is not enough if the official name is too ugly or it is fiddly to type.