ヘッダーファイルに次の宣言があります。
struct my_struct;
int func(struct my_struct* s); // Passing struct my_struct*
前方宣言がないと、コンパイラは明らかにこのエラーを出します。
error: 'struct my_struct' declared inside parameter list
ただし、の前方宣言をmy_struct
typedefに置き換え、それに応じて関数宣言を更新すると、正常にコンパイルされます。
typedef struct my_struct my_struct_t;
int func(mystruct_t* s); // Passing my_struct_t*
不思議なことに、typedefを保持しているが、元の宣言my_struct
を使用すると、コンパイルも行われます。
typedef struct my_struct my_struct_t;
int func(struct my_struct* s); // Passing struct my_struct*
他の誰かがそれに気づきましたか?その行動は副作用ですか?