Как обычно в С++ определяют размер массива, а очень просто, используют следующую конструкцию:
1
#define count_of( arg ) ( sizeof( arg ) / sizeof( arg[ 0 ] ) )
Однако она может стать причиной ошибки, если подсунуть туда указатель, не являющийся массивом, например, указатель на функцию. Проблему можно решить следующим образом (взято из исходных кодов проекта Chromium - основы браузера Google Chrome):
1
2
3
template <typename T, size_t N>
char (&ArraySizeHelper(T (&array)[N]))[N];
#define arraysize(array) (sizeof(ArraySizeHelper(array)))
Проблема решается потому, что массив передается по ссылке, а не по указателю.