(我说的是 C,但它也适用于 C++ 中的类模板)
在头文件中,习惯于放置所有声明,而不是定义。但是,我们通常也将结构定义或类模板放在头文件中,而实际上并不知道为什么可以这样做。这实际上没有任何意义,因为它们也是定义——一个定义规则。(是的,结构定义和类模板不会导致设置任何存储,但您仍然会在下面看到“重新定义”错误,这意味着它们是定义)。
EX)在同一个文件中定义多个具有相同标签的结构会给您重新定义错误,但在多个源文件中定义具有相同标签的多个结构不会导致任何错误(类也会发生同样的事情)。
唯一有意义的是结构定义和类模板具有内部链接(与默认的外部链接相反),但我在 K&R 或参考手册中找不到任何关于它的参考。事实上,连杆连结构都没有提到。
我想知道 ANSI 标准指出这种现象的确切参考。(IMO,这是一个非常模糊的事情,必须在 ANSI 标准中的某个地方提到)。
编辑 我不是在问为什么可以将结构定义放入头文件中。
我在问为什么将结构定义放在头文件中不会像我们将变量定义放在头文件中时那样导致重新定义错误(并将其包含在多个源文件中)
EX) test1.c: int a = 3; test2.c: int a = 4; 由于重新定义导致编译错误。然而,
test1.c: 结构测试 { int a }; test2.c: 结构测试 { int b }; 不会导致编译错误,我能想到的唯一原因是结构定义要么有内部链接,要么根本没有链接。