#include <stdio.h>
#include <stdint.h>
typedef struct
{
uint8_t bit1 : 1;
uint8_t bit2 : 1;
uint8_t bit3 : 1;
uint8_t bit4 : 1;
uint8_t rsvd : 4;
} TestWithStruct_t;
typedef union {
uint8_t reg;
struct
{
uint8_t bit1 : 1;
uint8_t bit2 : 1;
uint8_t bit3 : 1;
uint8_t bit4 : 1;
uint8_t rsvd : 4;
} bits;
} TestWithUnion_t;
int main()
{
TestWithUnion_t testWithUnion = {0};
TestWithStruct_t testWithStruct = {0};
/* Test with plain struct */
testWithStruct.bit1 = 1;
testWithStruct.bit2 = 0;
testWithStruct.bit3 = 1;
testWithStruct.bit4 = 1;
/* Test with union, containing a struct */
testWithUnion.bits.bit1 = 1;
testWithUnion.bits.bit2 = 0;
testWithUnion.bits.bit3 = 1;
testWithUnion.bits.bit4 = 1;
/* Test output */
printf("Test with struct 0x%02X %i \n", testWithStruct, sizeof(testWithStruct));
printf("Test with union with struct member 0x%02X %i \n", testWithUnion, sizeof(testWithUnion));
printf("Test with union with struct member 0x%02X %i \n", testWithUnion.reg, sizeof(testWithUnion));
/* Results in:
Test with struct 0x0D 1
Test with union with struct member 0x0D 1
Test with union with struct member 0x0D 1
*/
return 0;
}