De l'Union de l'initialisation en C++ et C

J'ai construit une de travail de la bibliothèque C, qui utilise des constantes, dans les fichiers d'en-tête défini comme

typedef struct Y {
  union {
    struct bit_field bits;
    uint8_t raw[4];
  } X;
} CardInfo;

static const CardInfo Y_CONSTANT = { .raw = {0, 0, 0, 0 } };

Je sais que le .raw initialiseur C est seulement la syntaxe.

Comment puis-je définir des constantes avec les syndicats d'une manière telle que je peux les utiliser en C et C++.

  • êtes-vous sûr de la mode mixte tag?
  • N'est-ce pas C++ de l'initialisation de la unions par le premier élément? I. e. static const Y_CONSTANT = {{0,0,0,0}};
  • puis il donne d'autres mises en garde sur le manque de croisillons.
  • J'ai juste essayé de faire de mon code, et il construit bien avec pas d'erreurs/avertissements. Êtes-vous sûr que vous êtes en utilisant le double de l'appareil? typedef struct A { union { struct bit_field bits; u_int8_t raw[4]; } X; } CardInfo; static const CardInfo Y_CONSTANT = {{0, 0, 0, 0 } };
  • ok accolades semblent faire l'affaire si vous utilisez la bonne quantité d'entre eux et le bon ordre, mais cela me limite alors à seulement capable d'initialiser UN choix de l'union. ne jamais me permettant d'initialiser le second.
  • C'est exact et c'est en quoi le langage est - vous êtes autorisé à initialiser le PREMIER élément de l'union et seule la première
  • Ma solution actuelle: Éviter constante des structures mixtes fichiers d'en-tête! Définir des constantes dans les en-têtes extern et, de là, vers l'éditeur de liens symbole. initialiser les constantes dans C. soit une langue ne l'initialisation me semble moins compliqué.
  • Les langues sont différentes. En C++ les bit_field aurait un constructeur pour initialiser ses membres, et vous ne serait guère besoin de l'union. Lorsque vous allez pour les plus petit dénominateur commun, vous limiter vous-même.
  • eh bien, nous avons une bibliothèque écrite en C parce que il a besoin pour s'exécuter sur un microcontrôleur un C++ n'est pas une option ENCORE là. le code C++ est le simulateur et le framework de test. l'alternative serait de tout écrire en C et je crois que ce serait pire. ou vous avez de meilleures suggestions?

InformationsquelleAutor Alex | 2012-07-19