//-Wall -Wextra -Wpedantic -Wshadow -Wconversion
#include <stdio.h>
#include <stdlib.h>

#define TEST_A
#define TEST_B


typedef struct
{
    struct
    {
        union
        {
            unsigned char uc;
            unsigned int ui;
        } TEST_A;

        unsigned int val_1;

    } TEST_B;
    
    unsigned int val_2;
    
} block_1;

typedef struct
{
    struct
    {
        union
        {
            unsigned char uc;
            unsigned int ui;
        } TEST_C;

        unsigned int val_1;

    } TEST_D;
    
    unsigned int val_2;
    
} block_2;

typedef struct
{
    struct
    {
        union
        {
            unsigned char uc;
            unsigned int ui;
        };

        unsigned int val_1;

    };
    
    unsigned int val_2;
    
} block_3;

int main()
{
        
        block_1 b1;

        b1.ui = 123;

        unsigned int v = b1.ui;

        printf("(1) %d\n", v);

        block_2 b2;

        b2.TEST_D.TEST_C.ui = 456;

        v = b2.TEST_D.TEST_C.ui;

        printf("(2) %d\n", v);

        block_3 b3;

        b3.ui = 789;

        v = b3.ui;

        printf("(3) %d\n", v);

    return 0;
}

/*
Output:

(1) 123
(2) 456
(3) 789

*/
