Ich versuche, eine Union wie im folgenden Beispiel global zu initialisieren:
%Vor%Wenn Sie jedoch den Code ausführen, werden Sie feststellen, dass weder temp.i noch temp.t [...] tatsächlich das korrekte Element angeben, mit dem ich die Verbindung initialisiert habe. Ich würde mir vorstellen, dass dies vermieden werden würde, wenn ich das Integer-Element manuell initialisieren könnte, aber leider nicht. Ich kann auch die Reihenfolge der Elemente innerhalb der Struktur nicht ändern (durch das Austauschen der int und char-Reihenfolge wird alles richtig initialisiert) - sie werden tatsächlich von einer externen Bibliothek bereitgestellt. Meine Frage ist: Wie kann ich das Integer-Element der Struktur global setzen, anstatt das Element char [4] (oder in diesem Fall nur das erste Element von char [])?
EDIT: Gibt es auch eine strikt-C ++ Lösung für dieses Problem? d. h. eine, wo die Initialisierung der benannten Struktur nicht funktioniert (weil sie in der Sprache nicht existiert)?
In C99 können Sie die benannte Initialisierung wie folgt verwenden:
%Vor%Es gibt einige Vorschläge zur Verwendung der nicht-standardmäßigen gcc-Erweiterung, aber ich würde es vermeiden, wenn ich C:
codiere %Vor%Sie können eine Funktion zum Initialisieren verwenden:
%Vor%und dann verwenden:
%Vor%Der Compiler wird die Kopien optimieren.
Wenn Sie C ++ ausführen, können Sie einen Konstruktor für Ihren Union-Typ angeben:
%Vor%Sie können das ganzzahlige Element wie folgt initialisieren:
%Vor%