Union Initialisierung

7

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)?

    
Ben Stott 28.05.2011, 10:15
quelle

4 Antworten

7

Sie möchten dies tun:

%Vor%

Das sollte sowohl für gcc als auch für g++ funktionieren.

    
evgeny 28.05.2011, 10:36
quelle
11

In C99 können Sie dies tun:

%Vor%     
Let_Me_Be 28.05.2011 10:19
quelle
7

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%     
quelle
6

Sie können das ganzzahlige Element wie folgt initialisieren:

%Vor%     
Blagovest Buyukliev 28.05.2011 10:21
quelle

Tags und Links