Autor Thema: struct statisch mit variablem array initialisieren  (Gelesen 7477 mal)

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« am: 23. January 2010, 08:50 »
Morgen zusammen,

ich habe ein Problem mit meinen Structs.
Ich möchte ein globales Struct schon vor der Laufzeit initialisieren.
Elemente dieses Teils sind auch zwei arrays, von denen ich nicht die Länge fest bestimmen kann.
Gibt es eine Möglichkeit, dass ich das Teil ohne Warnung und Fehler initialisieren kann?

Momentan sieht es wie folgt aus:
typedef struct{
mmu_table_type_t* table_type;
mmu_flag_t* single_flags[];
mmu_flag_t* combined_flags[];
uint32_t         single_flags_no;
uint32_t         combined_flags_no;
}mmu_features_t;

Und der Fehler:
Fehler: flexibles Feld-Element nicht am Ende von struct

Wenn ich aus dem Array einen einfachen Pointer mache, geht es aber mit der Warnung, dass es eine Elementüberschreitung bei einer Skalarinitialisieren gibt.

Was kann ich machen damit das alles nicht mehr existiert?
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

kevin

  • Administrator
  • Beiträge: 2 767
    • Profil anzeigen
Gespeichert
« Antwort #1 am: 23. January 2010, 10:14 »
Ich glaube, der Trick, den du suchst, ist, dass du den Pointer mit einem Array-Literal initialisierst (geht erst ab C99):

#include <stdio.h>

struct foo {
    int*    bar;
    int*    baz;
};

struct foo foo = {
    .bar    = (int[]) { 1, 2, 3 },
    .baz    = (int[]) { 4, 5, 6 },
};

int main(void)
{
    printf("%d - %d - %d \n",
        foo.bar[0], foo.bar[1], foo.bar[2]);
    printf("%d - %d - %d \n",
        foo.baz[0], foo.baz[1], foo.baz[2]);
}
Thou shalt not follow the NULL pointer, for chaos and madness await thee at its end.

rizor

  • Beiträge: 521
    • Profil anzeigen
Gespeichert
« Antwort #2 am: 23. January 2010, 11:52 »
Danke.
Das werde ich nachher mal ausprobieren
Programmiertechnik:
Vermeide in Assembler zu programmieren wann immer es geht.

 

Einloggen