| #include <stdarg.h> |
| #include <stdbool.h> |
| #include <stdint.h> |
| #include <stdlib.h> |
| |
| enum A |
| #ifdef __cplusplus |
| : uint8_t |
| #endif // __cplusplus |
| { |
| A_A1, |
| A_A2, |
| A_A3, |
| /** |
| * Must be last for serialization purposes |
| */ |
| A_Sentinel, |
| }; |
| #ifndef __cplusplus |
| typedef uint8_t A; |
| #endif // __cplusplus |
| |
| enum B |
| #ifdef __cplusplus |
| : uint8_t |
| #endif // __cplusplus |
| { |
| B_B1, |
| B_B2, |
| B_B3, |
| /** |
| * Must be last for serialization purposes |
| */ |
| B_Sentinel, |
| }; |
| #ifndef __cplusplus |
| typedef uint8_t B; |
| #endif // __cplusplus |
| |
| enum C_Tag |
| #ifdef __cplusplus |
| : uint8_t |
| #endif // __cplusplus |
| { |
| C_C1, |
| C_C2, |
| C_C3, |
| /** |
| * Must be last for serialization purposes |
| */ |
| C_Sentinel, |
| }; |
| #ifndef __cplusplus |
| typedef uint8_t C_Tag; |
| #endif // __cplusplus |
| |
| typedef struct C_C1_Body { |
| C_Tag tag; |
| uint32_t a; |
| } C_C1_Body; |
| |
| typedef struct C_C2_Body { |
| C_Tag tag; |
| uint32_t b; |
| } C_C2_Body; |
| |
| typedef union C { |
| C_Tag tag; |
| C_C1_Body c1; |
| C_C2_Body c2; |
| } C; |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif // __cplusplus |
| |
| void root(A a, B b, union C c); |
| |
| #ifdef __cplusplus |
| } // extern "C" |
| #endif // __cplusplus |