L'initialisation de Const Struct avec d'autres Const Struct Instances

Je suis curieux de savoir pourquoi l'extrait de code suivant ne compile pas:

typedef struct Foo {
    int a;
    int b;
} Foo;

static const Foo FooZero = { 0, 0 };

typedef struct Bar {
    Foo foo;
    int c;
} Bar;

static const Bar BarZero = { FooZero, 0 };

Il se plaint de l'utilisation de FooZero, indiquant que FooZero n'est pas un Compile-Time Constant

Mais n'est-ce pas? Ce que je ne suis pas à comprendre ici?

Évidemment, je ne peux simplement remplacer l'utilisation de FooZero dans l'initialiseur, avec { 0, 0 } - mon but, en posant la question n'est pas comment contourner le problème - j'essaie de comprendre la raison sous-jacente pourquoi FooZero n'est pas, en fait, une constante de compilation.

Grâce

double possible de Erreur "initialiseur élément n'est pas constante" lors de l'initialisation de variable const
stackoverflow.com/questions/3025050/... c'est une très bonne explication, l'encapsulation de ce que j'allais écrire
Bah - Merci pour le lien. Cependant, ma question est "pourquoi est-ce si". Je sens la réponse à la question que vous avez cité n'a pas vraiment répondu à ma question "pourquoi", ils ne font que souligner ce que je sais déjà à être le cas.
Vous ne pouvez pas se déplacer sans l'aide d'une fonction en C ? Aussi FooZero n'est pas de compiler constante de temps. C'est ce que à la fois les liens de dire.
Also FooZero is not compile time constant. Oui, encore, je le sais. Ma question est POURQUOI est-ce donc? Pourquoi la mécanique de la langue tel que cela est vrai?

OriginalL'auteur Steve | 2011-09-12