Oto makro uzyskania rozmiar tablicyC++ sens coraz wielkości tablicy
#define array_size(array) \
(sizeof(array)/(sizeof(array[0]) * (sizeof(array) != sizeof(void*) || sizeof(array[0]) <= sizeof(void*)))
myślę normalnie (sizeof (array)/(sizeof (array [0])) jest wystarczająco dobry, aby dostać wielkość tablicy.
Chyba part
(sizeof(array[0]) * (sizeof(array) != sizeof(void*) || sizeof(array[0]) <= sizeof(void*))
jest uniknięcie całość podzieloną przez zero, ktoś może pomóc wyjaśnić?
Z góry dziękuję.
zdrowie,
przypuszczam, że jest to, aby zapobiec przypadkowemu nadużyciom ze zbutwiałych wskaźnik do pierwszego elementu w tej sprawie, a platformy -zależnie, miałoby to wartość '0' ... –
sizeof nigdy nie wróci ze ro. – john
"należy unikać całej rzeczy podzielonej przez zero" Przeciwnie, wymusić będzie dzielenie przez zero w czasie kompilacji, gdy 'sizeof array == sizeof (void *)' i 'sizeof array [0]> sizeof (void *) '. –