C - 限制结构范围

时间:2012-06-22 15:04:39

标签: c struct scope

我在.c文件中有这个结构:

struct entry {
    int position;
    int length;
    struct entry *node;
};

现在,我如何将此结构 layout 的范围限制为主机文件,以便在另一个文件中为新结构 layout 使用相同的名称时,我没有'重新定义'错误?

我尝试在 struct 之前使用 static ,但它似乎毫无用处(我也没有意义)。顺便说一下,this question对我来说似乎没有用,因为在链接文件中复制 stuct entry 时会出现“重新定义”错误(使用MinGW)。

---编辑---
对于那些想要了解更多信息的人:herehere

2 个答案:

答案 0 :(得分:8)

您无法获得重新定义错误。类型是翻译单元的本地类型,并且没有任何可见性。只有函数和数据对象具有可见性。

如果您收到重新定义错误,则必须在标题或其他包含的文件中使用该名称,以使其最终位于同一个翻译单元中。

答案 1 :(得分:2)

听起来你想让struct entry在不同的文件中表示不同的东西。没关系:只需将用于定义每个版本结构的代码放在不同的.c文件中,并确保永远不要包含来自另一个c文件的c文件 或者包含头文件中的c文件。

每个翻译单元中只应存在一个结构定义。