【问题标题】: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 在我格式化帖子时丢失了,现在添加它。

标签: c standards standards-compliance


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 1970-01-01
    相关资源
    最近更新 更多