This is the code. ------------------------------
#define PointerA struct a * void f( PointerA ); typedef struct a * PA; struct a { int x; }; void f( PA a ) { } --------------------------------- This is the output warning: 'struct a' declared inside parameter list warning: its scope is only this definition or declaration, which is probably not what you want error: conflicting types for 'f' note: previous declaration of 'f' was here -------------------------------- This is valid C code by every other compiler. If there is already a thread about this, or a bug about it, I didn't find it searching this lsit or the bugs database. If I move even the 'typedef struct a *PA' above the first function, then 'struct a' is apparently defined, even if it is not.