Доброе утро, я пытаюсь создать структуру данных, которая может использоваться в разных приложениях, но передана функции передачи в том же виде, Я использую netbeans на данный момент, но это будет передано дальше к dsPIC30F (16-бит),C Вложенные союзы и структуры
typedef union {
union {
struct {
unsigned bit0 : 1;
unsigned bit1 : 1;
unsigned bit2 : 1;
unsigned bit3 : 1;
unsigned bit4 : 1;
unsigned bit5 : 1;
unsigned bit6 : 1;
unsigned bit7 : 1;
unsigned bit8 : 1;
unsigned bit9 : 1;
unsigned bit10 : 1;
unsigned bit11 : 1;
union {
struct {
unsigned bit12 : 1;
unsigned bit13 : 1;
unsigned bit14 : 1;
unsigned bit15 : 1;
};
unsigned char value;
} lastfour;
};
unsigned int value : 16;
};
union {
struct {
union {
struct {
unsigned bit0 : 1;
unsigned bit1 : 1;
unsigned bit2 : 1;
unsigned bit3 : 1;
};
unsigned char value;
} firstfour;
unsigned bit4 : 1;
unsigned bit5 : 1;
unsigned bit6 : 1;
unsigned bit7 : 1;
unsigned bit8 : 1;
unsigned bit9 : 1;
unsigned bit10 : 1;
unsigned bit11 : 1;
unsigned bit12 : 1;
unsigned bit13 : 1;
unsigned bit14 : 1;
unsigned bit15 : 1;
};
unsigned int value : 16;
};
} foo;
затем я использую следующий код для проверки работоспособности.
int main(int argc, char** argv) {
foo a;
a.value =0;
a.lastfour.value = 0xF;
printf("%d", a.value);
return (EXIT_SUCCESS);
}
Напечатанное значение 0, однако из-за союз я нахожусь под впечатлением две структур разделяют ту же память (16 бит), поэтому после установки «lastfour» на «значения» 0xf должна теперь быть 0xF000.
Может кто-нибудь дать некоторые указания на то, что я делаю не так и почему «значение» не читает ту же область памяти, которая содержит «» lastfour
Вам нужна дополнительная помощь? Если нет, пожалуйста, проверьте один из ответов ниже. Благодаря! –