Хорошо, я не полностью новичок, но я не могу сказать, что понимаю следующий макрос. Самая запутанная часть - это разделение со значением, приведенным к size_t: что, черт возьми, это дает? Тем более, что я вижу оператор отрицания, который, насколько мне известно, может привести к нулевому значению. Не означает ли это, что это может привести к ошибке деления на ноль? (Между прочим, макрос правильный и прекрасно работает.)
#define ARRAYSIZE(a) \
((sizeof(a) / sizeof(*(a))) / \
static_cast<size_t>(!(sizeof(a) % sizeof(*(a)))))