#define P0 0 #define P1 1 #define IdPonto char* #define CoordX int #define CoordY int #define IdPercurso char* #define Escalao char* typedef struct _Ponto { IdPonto c1; CoordX c2; CoordY c3; } *Ponto; typedef struct _Pontos2 { int flag; union { struct { Ponto c1; struct _Pontos2 *c2; } p0; struct { } p1; } u; } *Pontos2; typedef struct _Pontos { Ponto c1; Pontos2 c2; } *Pontos; #define ListaPontos Pontos typedef struct _ListaRefs2 { int flag; union { struct { IdPonto c1; struct _ListaRefs2 *c2; } p0; struct { } p1; } u; } *ListaRefs2; typedef struct _ListaRefs { IdPonto c1; ListaRefs2 c2; } *ListaRefs; typedef struct _Percurso { IdPercurso c1; Escalao c2; ListaRefs c3; } *Percurso; typedef struct _Percursos2 { int flag; union { struct { Percurso c1; struct _Percursos2 *c2; } p0; struct { } p1; } u; } *Percursos2; typedef struct _Percursos { Percurso c1; Percursos2 c2; } *Percursos; #define ListaPercursos Percursos typedef struct _OProva { ListaPontos c1; ListaPercursos c2; } *OProva;