gpt4 book ai didi

C 变量定义与外部声明

转载 作者:太空狗 更新时间:2023-10-29 16:01:15 25 4
gpt4 key购买 nike

这似乎是已经涵盖的问题,但我似乎无法找出位置。

我遇到了 gcc 的一个特殊行为。

我文件 A 我有以下定义:

struct SomeStruct {
unsigned int uiVarA;
unsigned int uiVarB;
} SomeVar;

我文件 B 的外部声明不同:

extern struct SomeStruct {
unsigned char filler;
unsigned int uiVarA;
unsigned int uiVarB;
} SomeVar;

事实上,我可以将定义设为 double,将 extern decleration 设为 int,gcc 将在没有警告的情况下愉快地编译(甚至使用 -Wall 和 -Wextra)。

我只能得出结论,这一定意味着它是完全合法的行为,但怎么会这样呢?

我知道链接器负责映射两个变量,但在这个阶段没有错误检查吗?

最佳答案

除非您将一个文件包含在另一个文件中,否则编译器将看不到您的两个定义。

通常您只需在头文件中单独声明结构,然后声明该类型的变量,例如:

在 a.h 中:

struct SomeStruct {
unsigned int uiVarA;
unsigned int uiVarB;
}

在 a.c 中你可以做: struct SomeStruct SomeVar; 在 b.c 中 extern struct SomeStruct SomeVar 在包含 a.h 之后。或者更好的是,将外部结构放在头文件中,并将其包含在 a.c 和 b.c 中。

关于C 变量定义与外部声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32695551/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com