嵌套结构名称可见性

Posted

技术标签:

【中文标题】嵌套结构名称可见性【英文标题】:nested structure name visibility 【发布时间】:2013-06-22 07:06:14 【问题描述】:

不知道下面的C代码是否有效:

struct A 
    struct B 
        int value;
     b;
;

struct B;

void func1(struct B* b) 
    b->value = 42;


void func2() 
    struct A a;
    func1(&a.b);

此代码使用 gcc 编译并按预期工作,而代码检查器抱怨,我想知道谁是正确的,以及这是否可以被标准(C90 或 C99)接受,以这种形式引用 struct B

【问题讨论】:

忽略嵌套,A a; 不应该编译。它必须是struct A a;。随着这一变化,MSVC 也接受了这一点。 谢谢,struct 在我格式化帖子时丢失了,现在添加它。 【参考方案1】:

是的,你可以,但如果你想在结构 A 之外使用结构 B,你会遇到错误。

【讨论】:

以上是关于嵌套结构名称可见性的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin基础-可见修饰符嵌套类

使用 jquery 更改具有嵌套内容的 div 的可见性,onclick

[GO]可见性

go语言学习笔记 — 基础 — 复合数据类型 — 结构体(9.1):结构体可见性规则,结构体和结构体成员字段的跨包导出

错误:错误:层次结构中没有找到匹配的视图:(标签值:是“电子邮件”并且视图具有有效的可见性=可见)

通过使用变量而不是图层名称本身来更改图层的可见性