Elia Pinto <gitter.spiros@xxxxxxxxx> writes: > +#if defined(__GNUC__) && (__GNUC__ >= 3) > +# if GIT_GNUC_PREREQ(3, 1) > + /* &arr[0] degrades to a pointer: a different type from an array */ > +# define BARF_IF_IS_NOT_AN_ARRAY(arr) \ > + BUILD_ASSERT_OR_ZERO(!__builtin_types_compatible_p(typeof(arr), \ > + typeof(&(arr)[0]))) > +# else > +# define BARF_IF_IS_NOT_AN_ARRAY(arr) 0 > +# endif > +#endif > +/* > + * ARRAY_SIZE - get the number of elements in a visible array > + * <at> x: the array whose size you want. > + * > + * This does not work on pointers, or arrays declared as [], or > + * function parameters. With correct compiler support, such usage > + * will cause a build error (see the build_assert_or_zero macro). > + */ > +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0]) + BARF_IF_IS_NOT_AN_ARRAY(x)) > + > #define bitsizeof(x) (CHAR_BIT * sizeof(x)) > > #define maximum_signed_value_of_type(a) \ Hmmmmmmmm. CC ws.o ws.c: In function 'parse_whitespace_rule': ws.c:46:3: error: unknown type name 'typeof' for (i = 0; i < ARRAY_SIZE(whitespace_rule_names); i++) { ^ $ gcc --version gcc (Ubuntu 4.8.2-19ubuntu1) 4.8.2 Copyright (C) 2013 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html