我在头文件中有以下声明:
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*
其他人注意到了吗?这种行为是副作用吗?