#define OFFSET_OF(TYPE, MEMBER) ((uintptr_t)(&((TYPE *)0)->MEMBER))
#define GET_MEMBER(TYPE, STRUCTURE, MEMBER) (*((typeof(((TYPE *)0)->MEMBER)*) \
((void*)(OFFSET_OF(TYPE, MEMBER) + (uintptr_t)&STRUCTURE))))
#define PRINT_MEMBER(TYPE, STRUCTURE, MEMBER) std::cout << std::setw(15) << std::left \
<< "["#MEMBER "] of [" #STRUCTURE "]: " << GET_MEMBER(TYPE, STRUCTURE, MEMBER) << std::endl
uintptr_t temp = -1;
struct Block {
int _int;
char _char;
};
Block block = {0, 'o'};
temp = OFFSET_OF(Block, _char);
std::cout << GET_MEMBER(Block, block, _char) << std::endl;
PRINT_MEMBER(Block, block, _int);
printf("temp = %u\n", temp);
return 0;
o
[_int] of [block]: 0
temp = 4