yunfu1117 发表于 2025-9-21 20:02

关于结构体声明的错误

版本迁移通过使用 "extern" 解决了多个错误,但仍有部分关于结构体声明的错误。

对于变量和函数,使用 "extern" 可以解决错误。在 GCC 10 中遇到了一些结构体声明相关的错误。

但对于结构体应如何解决这些错误?

公羊子丹 发表于 2025-9-22 07:21

结构体和变量不一样,不能只靠 extern,要先有完整定义。

周半梅 发表于 2025-9-22 07:22

如果只是声明,用 struct MyType;,但用之前必须在某个 .c 里有定义。

帛灿灿 发表于 2025-9-22 07:23

头文件里放定义会导致重复,建议用前置声明 + extern 的方式分离。

童雨竹 发表于 2025-9-22 07:24

GCC 10 对 C 标准更严格了,以前模糊写法现在直接报错。

万图 发表于 2025-9-22 07:24

你是不是把 typedef struct {...} my_t; 写在多个地方了?要统一。

Wordsworth 发表于 2025-9-22 07:25

建议公共头文件只写声明,具体实现放在一个源文件里。

Bblythe 发表于 2025-9-22 07:27

如果是跨文件访问,extern struct xxx var; 就够了,但结构体本身要有定义。

Pulitzer 发表于 2025-9-22 07:29

可以考虑把结构体封装进 API,不要暴露内部字段。

Uriah 发表于 2025-9-22 07:29

迁移时还要注意 C99 和 GNU 扩展的差异,有些写法不再兼容。

Clyde011 发表于 2025-9-22 07:30

贴点代码出来吧,这样大家能更快帮你定位问题。

onlycook 发表于 2025-9-22 15:20

结构体重复定义了。

powerantone 发表于 2025-9-22 16:21

可能是头文件被多次包含,导致重复编译。

stormwind123 发表于 2025-9-22 17:21

用头文件保护宏。

七毛钱 发表于 2025-9-22 18:22

结构体可能未声明。

内政奇才 发表于 2025-9-22 19:23

头文件包含顺序错误?

海滨消消 发表于 2025-9-22 19:24

在需要使用结构体的源文件中,先包含定义结构体的头文件,再包含其他依赖头文件。

豌豆爹 发表于 2025-9-22 20:24

C++对类型检查更严格,若结构体在C文件中定义但未用extern "C"包裹,C++编译器无法识别。

麻花油条 发表于 2025-9-22 22:25

在头文件中添加extern "C"保护。

classroom 发表于 2025-9-22 22:26

统一结构体定义位置,将结构体定义集中在专门的头文件。
页: [1] 2 3
查看完整版本: 关于结构体声明的错误