Comment initialiser une structure en accord avec le langage de programmation C normes

Je veux initialiser une structure de l'élément, divisé dans la déclaration et l'initialisation. C'est ce que j'ai:

typedef struct MY_TYPE {
  bool flag;
  short int value;
  double stuff;
} MY_TYPE;

void function(void) {
  MY_TYPE a;
  ...
  a = { true, 15, 0.123 }
}

Est-ce la façon de déclarer et initialiser une variable locale de MY_TYPE en conformité avec le langage de programmation C normes (C89, C90, C99, C11, etc.)? Ou est-il quelque chose de mieux ou au moins de travail?

Mise à jour j'ai fini par avoir une initialisation statique de l'élément où j'ai mis tous les sous-élément en fonction de mes besoins.

  • vous devriez vraiment accepter une meilleure réponse, je vois que vous avait à l'utilisation de certains mauvais guide de codage, mais vous ne devriez pas dire à d'autres gens que c'est la bonne façon de le faire..
  • ainsi, la plupart des bonnes réponses sont spécifiques à C99. Peut-être que ma question est un double de la stackoverflow.com/questions/6624975/... ?
  • si c'était votre intention d'origine, alors oui, probablement, mais alors 1) le vote pourrait être trompeur. 2) par le haut des résultats de recherche c'est la seule qui montre le C99 chemin..... il serait préférable de ré-utiliser cette page pour C99 démonstration... (apparemment, les gens ont commencé à lien de cette page pour montrer comment le faire)
  • Intéressant de noter que les acceptée (et fortement upvoted) réponse n'est pas réellement répondre à la question, de même que posté. Désigné initialiseurs de ne pas aborder le cas des OP problème, qui est de séparer la déclaration de l'initialisation. Pour le pré-1999 C, la seule vraie solution est d'attribuer à chaque membre; pour le C99 et plus tard, un composé littérale, comme dans CesarB réponse, est la solution. (Bien sûr, une réelle initialiseur, avec ou sans titres, serait encore mieux, mais apparemment, l'OP a été aux prises avec une très mauvaise norme de codage.)
  • Strictement parlant, le terme "ANSI C" désigne le 2011 norme ISO, ANSI a adopté. Mais, dans la pratique, le terme "ANSI C" désigne communément l' (officiellement obsolète) 1989 standard. Par exemple, "gcc-ansi" encore applique 1989 standard. Puisque c'est l'ISO qui a publié, en 1990, 1999 et 2011 normes, il est préférable d'éviter le terme de "ANSI C", et de se référer à la date de la norme, si il n'y a aucune possibilité de confusion.
  • Voir aussi Désignés initialiseurs et éléments omis un autre aspect de l'utilisation de désigné les initialiseurs. Ce n'est pas un doublon de cette question; il fournit des informations supplémentaires utiles.

InformationsquelleAutor cringe | 2008-12-01