foo.c的
struct foo {
int a;
};
bar.c
struct foo {
char *s;
double x,y;
};
结构定义仅在.c文件中。根据C标准是合法的吗?标准的哪一部分是这样说的? 编辑:没有结构定义的#inclusion。
谢谢大家快速回复! :d
答案 0 :(得分:6)
C99标准的第6.2.1-4节表明它是合法的,因为它们都在不同的范围内声明(每个范围都有文件范围从它们的定义扩展到翻译单元的末尾,即文件)
答案 1 :(得分:6)
代码完全合法C.您可能会遇到调试程序的问题(将一种类型误认为另一种类型并尝试将其中一种显示为另一种类型),但从语言的角度来看它很好。
标准中没有任何部分可以直接说这是合法的。相反,标准中没有任何部分说它是非法的。
这样的东西在C ++中是非法的,因为C ++将 linkage 的概念扩展到类,而C ++类中的非本地语言总是有外部链接。
答案 2 :(得分:1)
如果他们彼此“不知道”(即通过#include
或其他东西),那应该没问题。如果他们这样做,您可以查看How to resolve two structures with the same name?。