我有一個頭文件中聲明如下:typedef帶前向聲明副作用?
struct my_struct;
int func(struct my_struct* s); // Passing struct my_struct*
沒有提前聲明,編譯器會明顯給this error:
error: 'struct my_struct' declared inside parameter list
但是,如果我更換用typedef前向聲明my_struct
,並相應更新函數聲明,它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*
別的任何人察覺到嗎?這種行爲是否是一種副作用?
typedef也充當前向聲明,它將類型名稱帶入作用域。 – 2012-07-08 13:18:02
@DanielFischer是的,我注意到了,但我找不到標準中的任何內容。我錯過了什麼? – 2012-07-08 13:19:15
不需要前向聲明來創建指向結構的指針。這只是一個約定。我錯了嗎? – 2012-07-08 13:31:22