Является ли следующая программа C соответствующей стандартам (и по каким стандартам)? Если он не соответствует требованиям (нарушая строгое правило псевдонимов или иным образом), является ли он «безопасным» по отношению к GCC или любому другому широко используемому компилятору 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, как вы предлагаете использовать этот указатель? Или вы не собираетесь его использовать? - person 2501   schedule 19.08.2016Type1 *p_type1 = &aggregate
и вариантType2
являются несовместимым преобразованием указателя. - person ensc   schedule 19.08.2016