下面是一个符合标准的C程序(以及哪个标准)?如果它不符合(通过违反严格的别名规则或其他方式)对于GCC或任何其他常用的C编译器是否是“安全的”?集合C结构与其成员之间的指针是否符合标准?
int main()
{
typedef struct {
int data;
} Type1;
typedef struct {
float data;
} Type2;
typedef struct {
Type1 type1;
Type2 type2;
} Aggregate;
Aggregate aggregate;
aggregate.type1.data = 1;
aggregate.type2.data = 2.0;
Aggregate *p_aggegregate = &aggregate;
Type1 *p_type1 = (Type1*) &aggregate;
Type2 *p_type2 = (Type2*) &aggregate;
int data1 = p_type1->data;
float data2 = p_type2->data;
return 0;
}
'p_type2'不指向类型为Type2的对象,您如何建议使用该指针?或者你不打算使用它? – 2501
仅仅指向一个对象的指针不能访问它。所以别名不是一个问题。 – 2501
'Type1 * p_type1 =&aggregate'和'Type2'变体是不兼容的指针转换。 – ensc