私は、ヘッダーファイルに次の宣言があります:前方宣言がなければ前方宣言の副作用を持つtypedef?
struct my_struct;
int func(struct my_struct* s); // Passing struct my_struct*
を、コンパイラは明らかにthis errorを与えるだろう:
error: 'struct my_struct' declared inside parameter list
しかし、私は交換した場合my_struct
をtypedefで前方宣言し、それに応じて関数宣言を更新すると、compiles fine:
typedef struct my_struct my_struct_t;
int func(mystruct_t* s); // Passing my_struct_t*
不思議なことに、私は、typedefのを維持するが、元の宣言my_struct
を使用している場合、それalso compiles:
typedef struct my_struct my_struct_t;
int func(struct my_struct* s); // Passing struct my_struct*
は、誰がそれを 気づきましたか?その行動は副作用ですか?セクション6.2.1では
typedefも前方宣言として機能し、型名をスコープに持ち込みます。 –
@ダニエルフィッシャーはい、私はそれに気付いています:)しかし、私はそれを述べている標準で何も見つけることができませんでした。私は何か見落としてますか? –
構造体へのポインタを作成するための前方宣言は必要ありません。それは単なる大会です。私が間違っている? –