From: Stefan Richter <stefanr@s5r6.in-berlin.de>
To: Jan Engelhardt <jengelh@linux01.gwdg.de>, Pavel Machek <pavel@ucw.cz>
Cc: "Robert P. J. Day" <rpjday@mindspring.com>,
Linux kernel mailing list <linux-kernel@vger.kernel.org>
Subject: Re: lots of code could be simplified by using ARRAY_SIZE()
Date: Sun, 17 Dec 2006 12:44:54 +0100 [thread overview]
Message-ID: <45852DB6.1020805@s5r6.in-berlin.de> (raw)
In-Reply-To: <Pine.LNX.4.61.0612161912390.30896@yvahk01.tjqt.qr>
Jan Engelhardt wrote:
> On Dec 16 2006 08:09, Robert P. J. Day wrote:
>> On Sat, 16 Dec 2006, Pavel Machek wrote:
>>>> but we already have, from "include/linux/kernel.h":
>>>>
>>>> #define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]))
>>> Hmmm. quite misleading name :-(. ARRAY_LEN would be better.
"Size", "length", "width", "depth" is all the same in that one needs to
know the unit of measurement. The unit of measurement of ARRAY_SIZE is
one array member. This makes it useful as a bound for [ ] pointer
arithmetic which uses the same unit.
If you want to look at it from a slightly higher level of abstraction
and want to avoid the ambiguity WRT units of measurement (C programs
most often use Byte as unit for data size), consider the unitless
(cardinal) ARRAY_INDEX_BOUND or ARRAY_CARDINALITY. (In a language which
starts array indexes at 1 instead of 0, it could also be called
ARRAY_HIINDEX.)
But fortunately...
>> i suspect it's *way* too late to make that kind of change, given that
>> "ARRAY_SIZE" is firmly ensconced in countless places in the source
>> tree and that would be a major, disruptive change.
>>
>> even *i* wouldn't try to promote that idea. :-)
>
> You know, you could always make it compat for a while, but that requires
> approval from Linus I suppose /* heh, heh */
>
> I don't even know if this will compile everywhere,
> but I hope you can figure out the idea...
>
> #define ARRAY_SIZE(x) (print_warning(), sizeof(x) / sizeof(*x))
> #define ARRAY_LEN(x) (sizeof(x) / sizeof(*x))
> extern ...
> void print_warning(void) {
> printk("Don't use ARRAY_SIZE anymore, it will go away\n");
> }
...those who know that the ARRAY_SIZE macro is available also know what
it means and how to use it. Therefore there is no need to rename this macro.
--
Stefan Richter
-=====-=-==- ==-- =---=
http://arcgraph.de/sr/
prev parent reply other threads:[~2006-12-17 11:45 UTC|newest]
Thread overview: 18+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-12-13 19:58 lots of code could be simplified by using ARRAY_SIZE() Robert P. J. Day
[not found] ` <2F8F687E-C5E5-4F7D-9585-97DA97AE1376@oracle.com>
2006-12-14 22:27 ` Robert P. J. Day
2006-12-14 23:13 ` Stefan Richter
2006-12-15 10:36 ` Jan Engelhardt
2006-12-15 20:48 ` Robert P. J. Day
2006-12-15 22:54 ` Tim Schmielau
2006-12-16 11:59 ` Robert P. J. Day
2006-12-16 13:30 ` Tim Schmielau
2006-12-16 13:55 ` Robert P. J. Day
2006-12-17 18:13 ` Robert P. J. Day
2006-12-17 18:27 ` Randy Dunlap
2006-12-17 18:25 ` Robert P. J. Day
2006-12-14 23:16 ` Miguel Ojeda
2006-12-15 0:12 ` Robert P. J. Day
2006-12-16 8:40 ` Pavel Machek
2006-12-16 13:09 ` Robert P. J. Day
2006-12-16 18:14 ` Jan Engelhardt
2006-12-17 11:44 ` Stefan Richter [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=45852DB6.1020805@s5r6.in-berlin.de \
--to=stefanr@s5r6.in-berlin.de \
--cc=jengelh@linux01.gwdg.de \
--cc=linux-kernel@vger.kernel.org \
--cc=pavel@ucw.cz \
--cc=rpjday@mindspring.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox