C - 限制结构范围
Posted
技术标签:
【中文标题】C - 限制结构范围【英文标题】:C - Limit struct Scope 【发布时间】:2012-06-24 21:52:17 【问题描述】:我在 .c 文件中有这个结构:
struct entry
int position;
int length;
struct entry *node;
;
现在,如何将这个结构 layout 的范围限制在主机文件中,以便在另一个文件中为新结构 layout 使用相同名称时,我没有收到“重新定义”错误?
我尝试在struct之前使用static,但似乎没有用(我也没有意义)。顺便说一句,this question 对我来说似乎无效,因为在跨链接文件(使用 MinGW)复制 stuct 条目 时出现“重新定义”错误。
--- 编辑 --- 想了解更多的朋友:here, 和here。
【问题讨论】:
当你尝试编译/链接你的程序时,你能显示确切的错误信息吗 错误:重新定义“结构条目”。这是因为我将文件包含到另一个使用相同名称的文件中。将设计与实现隔离似乎是一个逻辑错误,其中翻译单元只需要通过头文件进行通信,而不是直接。 【参考方案1】:您不会收到重新定义错误。类型对于翻译单元来说是本地的,并且没有任何可见性。只有函数和数据对象具有可见性。
如果您遇到重新定义错误,您必须在标头或其他包含的文件中使用该名称,以便它在同一个翻译单元中结束。
【讨论】:
...或包含具有该名称的结构、联合或枚举的文件。 这是我的问题:“如果您遇到重新定义错误,您必须在标题或其他包含的文件中使用该名称,因此它最终会出现在同一个翻译单元中。”非常感谢。 @ecatmur - 所以这是错误的:dmst.aueb.gr/dds/cscout/doc/name.html ?这不会让我震惊,但确实让我烦恼。我没有方便的 C99 标准来仔细检查它。 对不起,我错了; 6.2.3 脚注 24:“标签的命名空间只有一个,尽管可能有三个。”【参考方案2】:听起来您想让struct entry
在不同的文件中表示不同的含义。没关系:只需将定义结构的每个版本的代码放在不同的.c
文件中,并确保永远不要包含来自另一个 c 文件的 c 文件
或者从头文件中包含一个 c 文件。
每个翻译单元中应该只存在一个结构定义。
【讨论】:
以上是关于C - 限制结构范围的主要内容,如果未能解决你的问题,请参考以下文章