Вы не должны создавать какие-либо структуры в заголовочных файлах. Если вы сделаете другой экземпляр, он будет создан в каждом C-файле, и вы включите заголовок, в котором обычно нет желаемого эффекта.
В C-файле для этого вам нужно будет сделать следующее.
void foo(){
struct A parent;
struct B child_b;
struct C child_c;
child_b.temp3 = 3;
child_b.temp4 = 4;
child_b.temp5 = 5;
child_c.temp6 = 6;
child_c.temp7 = 7;
child_c.temp8 = 8;
parent.temp1 = child_b;
parent.temp2 = child_c;
}
Я бы настоятельно рекомендовал сделать вспомогательные функции похожими на эти
void initB(struct B* s, int x, int y, int z){
s->temp3 = x;
s->temp4 = y;
s->temp5 = z;
}
Если вы хотите сохранить синтаксис инициализации массива, рассмотрите возможность использования объединения.