不同源文件中的结构定义重复

时间:2010-06-22 14:12:39

标签: c

foo.c的

struct foo {
  int a;
};

bar.c

struct foo {
   char *s; 
   double x,y;
};

结构定义仅在.c文件中。根据C标准是合法的吗?标准的哪一部分是这样说的? 编辑:没有结构定义的#inclusion。

谢谢大家快速回复! :d

3 个答案:

答案 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?