statische komplexe objekte initialisieren Frage/Problem
-
Hallo Leute,
ich habe folgendes typen
typedef struct stFoo { int a; double b; } stFoo; typedef struct stBar { int count; stFoo* p; int x; } stBar;
und will diese statisch in meinen c files vorab initalisiert haben:
static stFoo arFoo[] = { {1,1.1}, {2,2.2} }; static stBar barObj1 = { 2, arFoo, 42 }; static stBar barObj2 = { 2, arFoo, 43 };
bis hier in geht alls, aber nun möchte ich noch alle meine statischen stBar Objecte als Array:
static stBar arBars[] = { barObj1, /* hier FELER => kein konstanter wert!?) */ barObj2 /* hier FELER => kein konstanter wert!?) */ };
hmm.. was mach ich falsche, wie mache ich es richtig uns sauber?
Danke schonmal
EDIT: C99
EDIT2:
ich könnte es zwar so machen
static stBar arBars[] = { {2, arFoo, 42}, {2, arFoo, 43}, };
aber würde es lieber getrennt haben
-
Möchtest du die Struktur-Objekte denn nachträglich noch verändern?
Ansonsten einfach alsstatic const stBar barObjX
deklarieren.Edit: Wenn
count
die Anzahl der Elemente in dem Arrayp
darstellen soll, warum benutzt du nichtsizeof(arFoo) / sizeof(arFoo[0])
(bzw. mittels eines Makros), anstatt manuell2
?
-
@Th69 sagte in statische komplexe objekte initialisieren Frage/Problem:
Möchtest du die Struktur-Objekte denn nachträglich noch verändern?
Ansonsten einfach als static const stBar barObjX deklarieren.ja die sind fix, leider ändert sich an dem problem nichts, wenn ich überall "const" mache.
@Th69 sagte in statische komplexe objekte initialisieren Frage/Problem:
Wenn count die Anzahl der Elemente in dem Array p darstellen soll, warum benutzt du nicht sizeof(arFoo) / sizeof(arFoo[0]) (bzw. mittels eines Makros), anstatt manuell 2?
ja korrekt, das mache ich auch ,ist hier nur pseudo code fürs forum.. danke
-
@SoIntMan sagte in statische komplexe objekte initialisieren Frage/Problem:
ja die sind fix, leider ändert sich an dem problem nichts, wenn ich überall "const" mache.
Erhältst du dann dieselbe Fehlermeldung?
Der mit
const
geänderte Code kompiliert aber:- mit gcc 8.3: Ideone-Code
- mit gcc 14.2: Godbold-Code
Welchen Compiler (+Version) verwendest du denn?
-
@Th69 sagte in statische komplexe objekte initialisieren Frage/Problem:
Erhältst du dann dieselbe Fehlermeldung?
Der mit const geänderte Code kompiliert aber:mit gcc 8.3: Ideone-Code
mit gcc 14.2: Godbold-CodeWelchen Compiler (+Version) verwendest du denn?
Verwende MSVC Vs2022 Legacy Compiler... also auch keine "richtiger" C99 ..
-
OK, der MSVC (mit "/std:c11") kompiliert diesen Code nicht: Godbolt-Link
Auch umgekehrt nimmt er es nicht: Godbolt-Link
Er versteht anscheinend nur die direkte Initialisierung mit den geschweiften Klammern.
Edit:
Das einzige, was mir auf Anhieb einfällt, wäre mittels Makros: Godbold-Link
-
@Th69 sagte in statische komplexe objekte initialisieren Frage/Problem:
OK, der MSVC (mit "/std:c11") kompiliert diesen Code nicht: Godbolt-Link
Auch umgekehrt nimmt er es nicht: Godbolt-Link
Er versteht anscheinend nur die direkte Initialisierung mit den geschweiften Klammern.
Edit:
Das einzige, was mir auf Anhieb einfällt, wäre mittels Makros: Godbold-Linkoh danke dir für deine Mühen.. ok ist aber kein KO kriterium ich überlege mir was;) MACRO is ganzgut