Wie initialisiert eine struct struct innerhalb einer header-Datei in C?
Ich versuche Hafen einige alte code immer aus einem 20 Jahre alten DOS-system ein GNU Linux system. In mehreren header-Dateien, (die sind alle über dem Platz), Sie haben Strukturen von Strukturen, die Sie deklarieren und initialisieren. Ich bin immer Warnungen beim kompilieren mit der Art und Weise der legacy-code geschrieben wurde. Irgendwelche Tipps, wie ich das an die Arbeit mit einem Aufenthalt in der gleichen header-Datei?
Folgende ist ein Vereinfachtes Beispiel, das ich von dem was Sie tun.
struct A
{
struct B temp1;
struct C temp2;
};
struct B
{
int temp3;
int temp4;
int temp5;
};
struct C
{
int temp6;
int temp7;
int temp8;
};
//These are the variables in how they are related to the initialization below
//struct A test_one = {{temp3,temp4,temp5},{temp6,temp7,temp8}};
struct A test_one = {{1,2,3},{4,5,6}};
Was sind die Warnungen?
InformationsquelleAutor user548800 | 2010-12-20
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie nicht instanziieren, die alle Strukturen im header-Dateien. Wenn Sie eine andere Instanz erstellt werden, die in jeder C-Datei, die Sie den Kopf, in der Regel nicht die gewünschte Wirkung.
In einer C-Datei, um dies zu tun müssten Sie Folgendes tun.
Ich würde stark überlegen Hilfsfunktionen, die ähnlich wie diese
Wenn Sie möchten, halten Sie die array-Initialisierung syntax, dann erwägen Sie die Verwendung einer union.
man müsste declare die variable
extern
in der header-Datei und instanziieren und initialisieren Sie es in genau einer compilation unit.Ich versuchte wirklich zu tun die gleiche Sache innerhalb einer C-Datei anstelle der Kopf-und ich bin immer die gleichen Warnungen. Ich glaube, ich sollte re-Satz der ursprünglichen Frage, "Wie initialisiert eine struct struct in C?". Die Warnungen, die ich bekomme, sind "fehlende Klammer um Initialisierung" Warnung zusammen mit einem "in der Nähe von initializtion ...." Warnung.
Jens Gustedt: ich weiß, dass das, was Sie gemeint sind zu tun, aber diese person war Definition wird die variable in der Kopf-und wie es in mehreren Orten. Dies bedeutete, dass mehrere Variablen mit dem gleichen Namen und externe Bindung gab es in der linked binary (in C eine variable definiert mit " keine Speicherung Planer behandelt wird, als ein
extern
standardmäßig).So Frage ich erneut,, wenn Sie wurden initialisieren "struct A test_one" wie würden Sie physisch zu schreiben? Weil diese -> "{{1,2,3},{4,5,6}}" funktioniert nicht.
InformationsquelleAutor EnabrenTane
Deklarieren struct B und C vor A, d.h. :
InformationsquelleAutor mvladic
Den code, den Sie geschrieben ist nicht kompilierbar, da es illegal ist, die Nutzung unvollständiger Typ zu deklarieren
struct
Mitglieder. Ich gehe davon aus, dass Sie einfach misarranged Ihrestruct
Definitionen: die Definitionen fürB
undC
erste gehen sollte.Having said that, die einzige Warnung dieser code generieren kann, ist die "Warnung" von linker, die Beschwerden über mehrere Definitionen des gleichen Objekts
test_one
, wenn die header-Datei enthalten ist, in mehreren übersetzungseinheiten. In C ist dies technisch illegal, obwohl viele Compiler erlauben es als eine beliebte compiler-Erweiterung.So, was die "Warnungen" sind Sie immer auf???
InformationsquelleAutor AnT