Re: [PATCH v2] git-compat-util.h: implement a different ARRAY_SIZE macro for for safely deriving the size of array
- From
Junio C Hamano <gitster@pobox.com>
- Date
- Apr 27, 2015, 18:11 UTC
- Message-ID
- <xmqqsiblwidw.fsf@gitster.dls.corp.google.com>
- In-Reply-To
- <xmqq1tj5xxo1.fsf@gitster.dls.corp.google.com>
Junio C Hamano <gitster@pobox.com> writes:
Show 19 quoted lines
>> +#if SUPPORT__BUILTIN_TYPES_COMPATIBLE_P >> +/* &arr[0] degrades to a pointer: a different type from an array */ >> +#define _array_size_chk(arr) \ >> + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(arr), \ >> + typeof(&(arr)[0]))) >> +#else >> +#define _array_size_chk(arr) 0 >> +#endif > > Wouldn't there be a more sensible name? _chk does not tell us > anything about what is being checked, and the only thing this name > gives us is "what uses it" (i.e. it is some magic used by array-size > and does not say what it checks and what for). > > I think you are checking arr is an array and not a pointer. Perhaps > "#define is_an_array(arr)" or something along that line may be a > more descriptive name for it. > > I doubt the leading underscore is particularly a good idea, though.
And "is_an_array(arr)" is probably not quite a good name, as that sounds as if it would give 1 and adding it to sizeof(x)/sizeof(x[0]) does not make sense. barf_if_not_an_array() is what the macro does.