关于结构体声明的错误
版本迁移通过使用 "extern" 解决了多个错误,但仍有部分关于结构体声明的错误。对于变量和函数,使用 "extern" 可以解决错误。在 GCC 10 中遇到了一些结构体声明相关的错误。
但对于结构体应如何解决这些错误?
结构体和变量不一样,不能只靠 extern,要先有完整定义。 如果只是声明,用 struct MyType;,但用之前必须在某个 .c 里有定义。 头文件里放定义会导致重复,建议用前置声明 + extern 的方式分离。 GCC 10 对 C 标准更严格了,以前模糊写法现在直接报错。 你是不是把 typedef struct {...} my_t; 写在多个地方了?要统一。 建议公共头文件只写声明,具体实现放在一个源文件里。 如果是跨文件访问,extern struct xxx var; 就够了,但结构体本身要有定义。 可以考虑把结构体封装进 API,不要暴露内部字段。 迁移时还要注意 C99 和 GNU 扩展的差异,有些写法不再兼容。 贴点代码出来吧,这样大家能更快帮你定位问题。 结构体重复定义了。 可能是头文件被多次包含,导致重复编译。 用头文件保护宏。 结构体可能未声明。 头文件包含顺序错误? 在需要使用结构体的源文件中,先包含定义结构体的头文件,再包含其他依赖头文件。 C++对类型检查更严格,若结构体在C文件中定义但未用extern "C"包裹,C++编译器无法识别。 在头文件中添加extern "C"保护。 统一结构体定义位置,将结构体定义集中在专门的头文件。