C 在另一个结构中声明/定义的结构范围
从中阅读,我意识到在另一个结构中声明的结构的作用域与包含结构的作用域相同。我认为它只在包含结构中起作用。我从中得到了这个印象。它说有4个名称空间,其中一个是结构的成员。我“逻辑地”推断出内部结构的范围仅限于外部结构 是否有人可以提供标准参考,以了解范围规则在这种情况下是如何工作的?以及允许内部结构在包含结构外部可见的任何理由?如果它是可见的,为什么不在外部声明结构呢 问题2:对于术语,当我提供结构的成员时,比如C 在另一个结构中声明/定义的结构范围,c,struct,scope,C,Struct,Scope,从中阅读,我意识到在另一个结构中声明的结构的作用域与包含结构的作用域相同。我认为它只在包含结构中起作用。我从中得到了这个印象。它说有4个名称空间,其中一个是结构的成员。我“逻辑地”推断出内部结构的范围仅限于外部结构 是否有人可以提供标准参考,以了解范围规则在这种情况下是如何工作的?以及允许内部结构在包含结构外部可见的任何理由?如果它是可见的,为什么不在外部声明结构呢 问题2:对于术语,当我提供结构的成员时,比如 struct out{ int a, b; char c, d;
struct out{
int a, b;
char c, d;
struct in{
int a, b;
}e;
};
我是否为struct out
和struct in
提供了定义;还是我要为两者提供声明?我理解函数和基本数据类型之间的区别,但对于structs,这里并不是很清楚
编辑:我刚刚在SO上找到了有用的链接:
但这并没有提供任何理由。现在我怀疑是否有一个用于C的标记。在C中,没有任何“隐藏实现细节”,即您碰巧在外部结构中以文本方式定义结构标记是偶然的。(没有名称空间,没有:
)
<>在C++中,封装(隐藏)非常相关,它考虑内部结构定义了一个内部类型:至于原理,可能与事实不同,在C++中,我们没有范围解析操作符(<代码>::/COD>)。 至于问题
2
,您在示例中提供了一个定义和一个声明,这只是一个声明的示例:
struct out ;
另请参见:
对于C和C++之间的所有不兼容列表,你可以查看它的主题。 + 1,用于研究和尝试深入挖掘语言。我将看标准中的各个部分。但引用标识符的作用域何时结束更有用。我认为内部结构的作用域在包含结构之后结束。另外,你能快速看一下我在OP中嵌入的关于术语的问题2吗?谢谢!你能看一下我关于结构的其他问题,并提供一些意见吗?@富,这是一个更复杂的问题,需要更多的思考,而且C++中的规则确实更加困难。我并不是真的有足够的脑力,但我会尽我所能去研究它,但不确定什么时候会。我相信本是正确的,但有时你如何解释一些事情会产生很大的不同。