代码之家  ›  专栏  ›  技术社区  ›  RobertS supports Monica Cellio

省略指向结构的指针的前向声明是否有效/符合标准?

  •  2
  • RobertS supports Monica Cellio  · 技术社区  · 4 年前

    我最近遇到 this comment 通过 @Paul Ogilvie

    你说“要定义一个指向结构的指针,你只需要知道结构标记”。根据我的经验,这是不必要的。只要声明一个指向某个类型的指针,编译器就会为指针保留空间,并在赋值时进行类型检查。只有当您希望取消对指针的引用并访问其成员时,类型才必须完全已知。”

    struct foo {
        int a;
        struct bar* x;
    };
    
    struct bar {
        int b;
    };
    

    Evidence

    但这让我不禁要问:这个标准是否合规?

    本标准的引用非常感谢。

    1 回复  |  直到 4 年前
        1
  •  2
  •   dbush    4 年前

    如果表示相同,则意味着尺寸相同。

    第6.2.6.1p2节 C standard 州:

    存储在任何其他对象类型的非位字段对象中的值[ed.not unsigned char] n×CHAR_BIT n 对象的大小 该值可以复制到类型为的对象中 unsigned char [n] memcpy ); 得到的字节集是 对象表示法 有价值的。 位字段包括 比特,哪里 是否指定尺寸

    例如 int short 在gcc中,两者都使用2的补码,但它们没有相同的对象表示形式,因为一个是4个字节,另一个是2个字节。