Hier ist ein Makro für das Erhalten Array-GrößeC++ die Bedeutung Größe einer Reihe von immer
#define array_size(array) \
(sizeof(array)/(sizeof(array[0]) * (sizeof(array) != sizeof(void*) || sizeof(array[0]) <= sizeof(void*)))
Ich denke, normalerweise (sizeof (array)/(sizeof (array [0])) ist gut genug zu bekommen die Größe des Arrays.
ich denke, den Teil
(sizeof(array[0]) * (sizeof(array) != sizeof(void*) || sizeof(array[0]) <= sizeof(void*))
ist das ganze durch Null geteilt zu vermeiden, jemand zu erklären helfen könnte?
Vielen Dank im Voraus.
Cheers,
ich würde vermuten, dass diese zufälligen Missbrauch mit einem verfallenen Zeiger-to-first-Elemente zu verhindern, ist in diesem Fall und Plattform -abhängig hätte dies den Wert "0" ... –
sizeof kann nie ze zurückgeben ro. – john
"ist die ganze Sache durch Null geteilt zu vermeiden" Im Gegensatz dazu ist es eine Division durch Null bei der Kompilierung zu erzwingen, wenn "sizeof Array == sizeof (void *)" und "sizeof array [0]> sizeof (void *) '. –