These definitions are actually two-fold, first is the ARRAY_SIZE definition `(sizeof(a) / sizeof((a)[0]))` which gives the amount of elements given an array.

The second part is a compile-time assertion (the STATIC_ASSERT_EXPR handles that), which asserts that the argument given is actually an array, not a pointer. This last part is what adds the greatest deal of complexity to its implementation, but makes using the macro no more difficult (in fact it makes it safer).