тяжелый случай, что сказать Посмотрим на строчки из stddef.h
typedef unsigned int size_t;
#define offsetof(type,member) ((size_t)(&((type*)0)->member))
1) Компилер будет ругаться на (type*)0.
Даже заменив 0 на 0L, получим, что
2) При приведении результата к size_t мы получим 16 бит указатель, без желанного старшего байта (для 24 бит указателя, конечно).
Полагаю, этот stddef.h никуда не годен.
Если честно, я вообще не знал, что такое есть :). Изворачиваюсь арифметикой.