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 als static const stBar barObjX deklarieren.

    Edit: 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?



  • @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:

    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-Code

    Welchen 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-Link

    oh danke dir für deine Mühen.. ok ist aber kein KO kriterium ich überlege mir was;) MACRO is ganzgut


Log in to reply