From: Junio C Hamano Date: Mon, 27 Apr 2015 18:11:55 GMT Subject: Re: [PATCH v2] git-compat-util.h: implement a different ARRAY_SIZE macro for for safely deriving the size of array Message-ID: In-Reply-To: Junio C Hamano writes: >> +#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.