То, что у вас есть, настолько чистое, насколько это возможно, если вы не можете гарантировать, что у вас есть переменная для разыменования. (Если вы можете, тогда, конечно, используйте только sizeof(var.member)
или sizeof(ptr->member)
, но это не сработает в некоторых контекстах, где требуется постоянная времени компиляции.)
Когда-то давным-давно (около 1990 года) я столкнулся с компилятором, у которого 'offsetof
' определен с использованием базового адреса 0, и он вышел из строя. Я обошел проблему, взломав <stddef.h>
, чтобы использовать 1024 вместо 0. Но вы не должны сталкиваться с такими проблемами сейчас.