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

Nya*_*yan 1 c

foo.c的

struct foo {
  int a;
};

bar.c

struct foo {
   char *s; 
   double x,y;
};
Run Code Online (Sandbox Code Playgroud)

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

谢谢大家快速回复!:d

sje*_*397 6

C99标准的第6.2.1-4节表明它是合法的,因为它们都在不同的范围内声明(每个范围都有文件范围从它们的定义延伸到翻译单元的末尾,即文件).

  • @Owen S:在 C 语言中,*linkage* 的概念不适用于 *types*。在 C 中,链接仅适用于对象或函数。 (2认同)
  • @AndreyT - 为了变得非常迂腐,他们有一种叫做'none'的联系方式:) (2认同)

AnT*_*AnT 6

代码完全合法C.您可能会遇到调试程序的问题(将一种类型误认为另一种类型并尝试将其中一种显示为另一种类型),但从语言的角度来看它很好.

标准的任何部分都没有直接说这是合法的.相反,该标准的任何部分都没有说它是非法的.

这样的东西在C++中是非法的,因为C++将链接的概念扩展到类,而C++类中的非本地语言总是具有外部链接.