在阅读严格别名时我想到了一些奇怪的东西。
引用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;
根据上面的引用,它们在技术上应该是别名吗?这似乎非常错误 我错过了什么?