foo.c的重复结构定义
struct foo {
int a;
};
bar.c
struct foo {
char *s;
double x,y;
};
的结构定义只在.c文件。根据C标准是否合法?标准的哪一部分如此说明? 编辑:没有#include结构定义。
谢谢大家的快速响应! :D
foo.c的重复结构定义
struct foo {
int a;
};
bar.c
struct foo {
char *s;
double x,y;
};
的结构定义只在.c文件。根据C标准是否合法?标准的哪一部分如此说明? 编辑:没有#include结构定义。
谢谢大家的快速响应! :D
该代码完全合法C.您可能会遇到调试器问题(将一种类型误认为另一种类型,试图将其中一种显示为另一种类型),但从语言的角度来看,这样做很好。
没有标准的任何部分可以直接说这是合法的。相反,没有任何标准说明它是非法的。
因为C++将链接的概念扩展为类,而C++类中的非本地链接始终具有外部链接,所以类似这样的内容在C++中将是非法的。
如果他们不知道彼此(即通过#include
什么的),那应该没有问题。如果他们这样做,你可以看看How to resolve two structures with the same name?。
对第二段没有把握。没有什么说我不能在我的代码中放大象;) – sje397 2010-07-19 17:12:53
@ sje397:是的,但标准甚至没有引入“大象”的概念。至于结构类型 - 它们存在于标准中,并且结构的声明规则也在标准中描述。该标准说明了在程序中使用结构类型需要做些什么,只要满足这些要求,您就可以。 – AnT 2010-07-19 18:22:38
基本上,它就像是问你将结构类型命名为“Abcdef”是否合法。你会如何回答这样的问题?如果你只是说“是”,那么接下来的问题将是'Dgefht'作为一个结构类型名称。这个好吗?等等......所以,当涉及到这样的问题时,正确的答案是,如果标准不禁止这样的标识符,那么使用它就可以。与原始问题中的结构声明一样。 – AnT 2010-07-19 18:25:21