Vermeidung von doppelten Struct-Deklaration
-
Hallo c-Community,
habe mal eine Frage zu der Deklaration von struct's, welche in unterschiedlichen Dateien (Funktionen) gebraucht werden.
Zum Besseren Verständnis ein Beispiel-Programmaufbau:
main.h
#include <stdio.h> #include <stdlib.h> struct BspStruct { int status; char* value; };
main.c
#include "main.h" int main(int argc, char* argv[]) { struct BspStruct* structBspStruct; structBspStruct = malloc(sizeof(stuct BspStruct)); meineFunktion(structBspStruct); // weitere Verarbeitung return 0; }
meineFunktion.h
void meineFunkton(struct BspStruct* bspStuct);
Wenn ich die Funktion "meineFunktion" jetzt funktionstüchtig implementieren möchte, muss ich das mit Hilfe einer doppelten Deklaration von BspStruct.
meine Funktion.c
struct BspStruct { int status; char* value; }; #include "meineFunktion.h void meineFunktion(struct BspStruct* bspStruct) { //Anweisungen }
Wie man sich vorstellen kann, ist eine Änderung des Struct's immer mit der Suche nach allen Funktionen (Dateien) verbunden, wo das Struct Verwendung findet. Dies würde ich gern umgehen.
Ich könnte natürlich eine separate Header-Datei für das Struct erstellen und entsprechend einbinden. Ist dies die einzige Möglichkeit? Gibt es eine elegante Möglichkeit dies mit EINER Deklaration zu umgehen?
MfG
mirrowwinger
-
Dann ist die Deklaration in main.h falsch aufgehoben.
Du schreibst ja meist noch andere Funktionen, die etwas mit der struct anfangen.
Deren Prototypen kommen dann ja auch noch mit in die Headerdatei.Was spricht sonst aber gegen eine .h, die nur die Deklaration deiner struct enthält?
In deinem Beispiel sind die beiden
#include
in main.h überflüssig, da du nichts von denen brauchst.
Wenn du in main.c ein printf brauchst, dann mach das#include <stdio.h>
in main.c
-
ok habe das jetzt auch mit einer Header-Datei gelöst.
Danke
-
Viele Compiler warnen, wenn der gleiche (Typ)Name im gleichen Sichtbarkeitsbereich wiederholt deklariert wird.