Hallo,
bei einer Konsolenausgabe will ich statt der Integerwerte einen
beschreibenden Text ausgeben. Ich dachte dann dabei an ein Mapping à la
1 | typedef struct {
|
2 | const uint8_t index;
|
3 | const char str[];
|
4 | } desc_t;
|
Nun kann ich nicht einfach hergehen und die "Strings" der Reihe nach
herunterschreiben, sie stehen ja noch in einem Verhältnis zueinander.
Ich dachte dann an eine "Über"Struktur
1 | typedef struct {
|
2 | desc_t input[];
|
3 | desc_t output[];
|
4 | } description_t;
|
Mit Leben füllen, wollte ich die Struktur dann wie folgt.
1 | const description_t Desc {
|
2 | {
|
3 | { 0, "text1" },
|
4 | { 1, "text2" },
|
5 | { 2, "text3" },
|
6 | { 3, "text4" },
|
7 | { 4, "text5" },
|
8 | },
|
9 | {
|
10 | { 0, "blob1" },
|
11 | { 8, "blob8" },
|
12 | },
|
13 | };
|
Und verwenden würde ich sie gerne so.
1 | print(Desc.input[0].str);
|
So viel zu meinen Wünschen :) Funktionieren tut davon eher nichts. An
stört sich der Compiler, weil zum Zeitpunkt der Übersetzung bekannt sein
muss wie groß das Array ist. Hier kann ich natürlich erstmal mit
"Abhilfe" schaffen, aber wirklich schön finde ich das dann auch wieder
nicht, denn die Speicherbereiche sollen beim Compilieren vorgesehen
werden. Ich will nicht mit malloc() rumtun.
Weiterhin stört sich der Compiler an
1 | const description_t Desc {
|
2 | {
|
3 | { 0, "text1" },
|
Hier warnt er mit "exess elements in scalar initializer" und das geht
wieder in die "ich reserviere eine Adresse auf einen Speicherbereich,
aber nicht den Speicherbereich"-Ecke.
Ich bin ja sicherlich nicht der erste, der so etwas vor hat.
Hätte da jemand was für mich? Tipps? Links? Code?^^
Danke!