Because you defined Args
as int *[]
, the member args
is effectively declared as
int *args[];
This is a flexible array member, and they are only allowed at the end of a structure.
If you meant to imply that Args
was a pointer (in the same vein as char **argv
), declare it as a pointer:
typedef int **Args;