Разбить:
#define My_Sizeof(type) ((char*)((type*)0 +1) - (char*)(type*)0)
(char*)(type*)0
равен нулю
(type*)0 +1
делает арифметику указателей, используя указатели типа (type *)
, поэтому (type *)0 + 1
будет указателемсмещение точно 0 + 1 * sizeof(type) = sizeof(type)
байтов
Когда разница принимается за (type *)
, разница составляет 1
.Когда разница берется с обоими типами (char *)
, разница составляет sizeof(T) - 0 = sizeof(T)