Макрос offsetof () требует structname и membername и поэтому не может использоваться с определениями встроенных структур. Ну, может быть, в вашей реализации это возможно, но это не гарантируется стандартом C.
Обновление:
Как указано в комментариях, это возможно:
struct blah { int a; int b; };
x = offsetof(struct blah, a); // legal
Но вставка определения структуры не такова:
x = offsetof(struct {int a; int b;}, a); // illegal
Первый не содержит ключевого слова typedef , но встраивание определения структуры также невозможно. Какая версия обозначена как «простое выписывание производного типа», неясно.