Вот две версии макроса для двух форм sizeof
(принимает тип против принимает переменную), которые вы можете использовать для всего кода, который вы никогда не напишите, где вам не разрешено использовать sizeof
:
#define type_sizeof(t) (size_t)((char *)((t *)1024 + 1) - (char *)((t *)1024))
#define var_sizeof(v) (size_t)((char *)(&(v) + 1) - (char *)&(v))
Возможно, с помощью некоторой глубокой магии вы можете объединить два в один макрос, который почти послужит заменой всего этого кода, не содержащего sizeof
.(Жаль, что вы не можете исправить ошибки множественной оценки.)