22Янв/130
Для чего нужен union
Продолжаю открывать для себя С++...
Объединение служит для, как бы это ни казалось странным, объединения.
Это позволяет, записывая данные в одно поле union'а, одновременно получать эти же данные в другом поле. Причем поля могут быть разные по содержимому.
Пример:
typedef struct
{
unsigned short fbNVRIncorrectCRC :1;
unsigned short fbConfigIncorrectCRC :1;
unsigned short fbSPIInterfaceError :1;
unsigned short fbMFIncorrectCRC :1;
unsigned short fbMFWriteError :1;
unsigned short fbMFNotInstalled :1;
unsigned short fbEEJFatalError :1;
unsigned short fbUnused1 :1;
unsigned short fbNotInitialized :1;
unsigned short fbNonFiscalMode :1;
unsigned short fbShiftOpened :1;
unsigned short fb24HourOverflow :1;
unsigned short fbEEJArchieveClosed :1;
unsigned short fbEEJNotActivated :1;
unsigned short fbMFNoMemoryForShift :1;
unsigned short fbMFWrongPassword :1;
unsigned char dbDocumentType;
} ST_FRSTATUS;
typedef union
{
ST_FRSTATUS stStatus;
unsigned char dbStatus[3];
} UN_FRSTATUS;
И теперь можно записать данные в массив unsigned char dbStatus[3]; и потом получить их из структуры уже разобранными.
Т.е. можно обратиться к dbStatus[2] и к stStatus.dbDocumentType и получить один и тот же результат.
Единственное - нельзя обращаться по разным именам в одном блоке программы..
Комментарии (0)
Пинги (0)
(подписаться на новые комментарии в этой ветке)
Нет обратных ссылок на эту запись.
Leave a comment