自引用结构声明

一些名字

我试图理解标准中的一些例子是什么意思。

N2346::6.7.2.3/p12(我的):

示例 2为说明使用标签的事先声明来指定一对相互引用的结构,声明

struct s1 { struct s2 *s2p; /* ... */ }; // D1
struct s2 { struct s1 *s1p; /* ... */ }; // D2

指定一对包含彼此指针的结构。但是请注意,如果s2已经在 封闭范围内D1 声明为标记,则声明将引用它,而不是在 中声明标记为了消除这种上下文敏感性,s2D2 声明

struct s2;

可以提前插入D1s2在内部范围内声明了一个新标签D2然后声明完成了新类型的规范。

我真的不明白强调的部分是什么意思。

如果s2在封闭范围内声明一个标签,例如如下:

struct s2; //previous visible declaration
struct s1 { struct s2 *s2p; /* ... */ }; // D1
struct s2 { struct s1 *s1p; /* ... */ }; // D2

然后声明和定义都将指定相同的类型。N2346::6.7.2.3/p8

如果表单的类型说明符

struct-or-union identifier

或者

enum identifier

不是作为上述形式之一的一部分发生,并且标识符作为标记的声明是可见的,那么它指定与其他声明相同的类型,并且不重新声明标记。

类型是在 处struct s2 { struct s1 *s1p; /* ... */ };定义的D2

那么标准通过在前面插入声明D1来消除上下文敏感性有什么作用。我在这里没有看到任何上下文敏感性。

汤姆·卡尔兹

您创建的示例只有一个作用域。为了证明他们的观点,您需要有一个嵌套的作用域。例如,以下完整程序演示了这一点:

#include <stdio.h>

struct foo {
    int     a;
};

int main(void)
{
    struct bar {
        int     b;
        struct foo *ptr;
    };

    struct foo {
        int     c;
        struct bar *ptr;
    };

    struct bar x;

    printf("%zu %zu\n", sizeof(struct foo), sizeof(*x.ptr));

    return 0;
}

当我在我的系统上运行它时,我得到:

16 4

这两个大小不同的原因是因为第一个大小来自 的本地定义struct foo,而struct bar使用的是先前声明的 全局定义struct foo,因为 的定义struct bar先于 的本地定义struct foo

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

自引用结构声明

来自分类Dev

自引用结构

来自分类Dev

C#通用自引用声明

来自分类Dev

Rails重构代码以遍历自引用结构

来自分类Dev

是否可以在 Julia 中声明对任何结构的通用引用?

来自分类Dev

使用非静态引用的方法的静态声明结构

来自分类Dev

在嵌套结构中声明内部结构变量而不引用外部结构

来自分类Dev

如何在C ++中声明自引用容器?

来自分类Dev

JSON模式是否应要求文档声明$ schema(是自引用的)?

来自分类Dev

Python GraphQL如何声明自引用石墨烯对象类型

来自分类Dev

在实体框架中创建自引用层次结构表

来自分类Dev

如何使用自引用结构定义(在 C 中)?

来自分类Dev

如何为自引用数据层次结构创建graphql模式?

来自分类Dev

无动态内存分配的自引用(递归)结构

来自分类Dev

从自引用mysql表中检索父子层次结构

来自分类Dev

为什么C输出中的自引用结构无效

来自分类Dev

如何将Pin结构与自引用结构一起使用?

来自分类Dev

MVC路由模板表示无限的自引用层次结构类别结构

来自分类Dev

C语言中具有自引用结构的内存体系结构

来自分类Dev

是否有可能:结构内的函数作用于同一结构的数据成员,而不必提供结构的自引用?

来自分类Dev

是否有Python方式引用我们正在使用(某些)Python内置类型声明的当前对象(自引用)?

来自分类Dev

Laravel ORM从自引用表获取N级层次结构JSON

来自分类Dev

为什么我们在自引用结构中使用指针?

来自分类Dev

使用EntityFramework.Core从自引用表加载完整层次结构

来自分类Dev

在Rust结构中使用自引用封装顺序初始化状态

来自分类Dev

体系结构i386的未定义符号:“ _ CMTimeMake”,引用自:

来自分类Dev

在Spark结构化流中反序列化自引用原始协议

来自分类Dev

将类别父ID自引用表结构映射到EF Core实体

来自分类Dev

是否可以使用Pin在堆栈上而不是在堆上创建自引用结构?

Related 相关文章

  1. 1

    自引用结构声明

  2. 2

    自引用结构

  3. 3

    C#通用自引用声明

  4. 4

    Rails重构代码以遍历自引用结构

  5. 5

    是否可以在 Julia 中声明对任何结构的通用引用?

  6. 6

    使用非静态引用的方法的静态声明结构

  7. 7

    在嵌套结构中声明内部结构变量而不引用外部结构

  8. 8

    如何在C ++中声明自引用容器?

  9. 9

    JSON模式是否应要求文档声明$ schema(是自引用的)?

  10. 10

    Python GraphQL如何声明自引用石墨烯对象类型

  11. 11

    在实体框架中创建自引用层次结构表

  12. 12

    如何使用自引用结构定义(在 C 中)?

  13. 13

    如何为自引用数据层次结构创建graphql模式?

  14. 14

    无动态内存分配的自引用(递归)结构

  15. 15

    从自引用mysql表中检索父子层次结构

  16. 16

    为什么C输出中的自引用结构无效

  17. 17

    如何将Pin结构与自引用结构一起使用?

  18. 18

    MVC路由模板表示无限的自引用层次结构类别结构

  19. 19

    C语言中具有自引用结构的内存体系结构

  20. 20

    是否有可能:结构内的函数作用于同一结构的数据成员,而不必提供结构的自引用?

  21. 21

    是否有Python方式引用我们正在使用(某些)Python内置类型声明的当前对象(自引用)?

  22. 22

    Laravel ORM从自引用表获取N级层次结构JSON

  23. 23

    为什么我们在自引用结构中使用指针?

  24. 24

    使用EntityFramework.Core从自引用表加载完整层次结构

  25. 25

    在Rust结构中使用自引用封装顺序初始化状态

  26. 26

    体系结构i386的未定义符号:“ _ CMTimeMake”,引用自:

  27. 27

    在Spark结构化流中反序列化自引用原始协议

  28. 28

    将类别父ID自引用表结构映射到EF Core实体

  29. 29

    是否可以使用Pin在堆栈上而不是在堆上创建自引用结构?

热门标签

归档