标准是否说这些类型可以别名?

时间:2015-01-15 17:59:42

标签: c strict-aliasing

在阅读严格别名时我想到了一些奇怪的东西。

引用C标准中的别名规则:

  

对象的存储值只能由具有以下类型之一的左值访问:

     
      
  • 对象的声明类型

  •   
  • 对象的声明类型的限定版本,

  •   
  • 与声明的对象类型对应的有符号或无符号类型的类型,

  •   
  • 一种类型,是有符号或无符号类型,对应于声明的对象类型的限定版本,

  •   
  • 聚合或联合类型,其成员中包含上述类型之一(包括递归地,子聚合或包含联合的成员),或

  •   
  • 字符类型。

  •   

这是否意味着如果我声明一个类型的变量,比如说,

struct struct1 {
    int a;
};

/* ... */

/* an object. The declared type of the object is struct struct1 */
struct struct1 test;

并声明另一种类型,比如说,

struct struct2 { /* an aggregate or union type that includes... */
    int a;
    struct struct1 test; /* ...one of the aforementioned types among its members:
                            (the declared type of the object) */
};
/* ... */
struct struct2 test2;

根据上面的引用,它们在技术上应该是别名吗?这似乎非常错误  我错过了什么?

0 个答案:

没有答案