Чтобы эмулировать аппаратный регистр, к которому можно получить доступ как два восьмибитных регистра или один 16-битный регистр, вы можете использовать:
union
{
struct { int8_t b, c; };
int16_t bc;
} regs[1];
Тогда regs->bc
будет 16-разрядным регистром, а regs->b
и regs->c
будут 8-разрядными регистрами.
Примечание. При этом используется анонимный struct
, поэтому b
и c
выглядят так, как если бы они были членами союза. Если у struct
было имя, например:
union
{
struct { int8_t b, c; } s;
int16_t bc;
} regs[1];
тогда вам нужно будет включить его имя при доступе к b
или c
, как с regs->s.b
. Однако в C есть функция, которая позволяет вам использовать для этой цели объявление без имени.
Также обратите внимание, что для этого требуется компилятор Си. C позволяет использовать объединения для переинтерпретации данных. C ++ имеет другие правила.