Cross-Includes
-
hi,
kann ich in C Cross-Includes machen? Also eine Datei accountlist.h bindet die client.h ein und umgekehrt? Bei mir kommen da jedenfalls immer einige Fehler.
accountlist.h:
#ifndef _MSD_ACCOUNTLIST_H_ #define _MSD_ACCOUNTLIST_H_ #include <libmsd/msd.h> #include <list.h> #include <config.h> #include <account.h>
client.h:
#ifndef _MSD_CLIENT_H_ #define _MSD_CLIENT_H_ #include <libmsd/msd.h> #include <pth.h> #include <arpa/inet.h> #include <mysql/mysql.h> #include <unistd.h> #include <fifo.h> #include <config.h> #include <banlist.h> #include <accountlist.h> #include <streamlist.h> #include <playlist.h> #include <util.h>
Als Fehlermeldung bekomme ich das:
In file included from ./accountlist.h:24, from accountlist.c:20: ./client.h:44: Fehler: expected declaration specifiers or »...« before »accountlist_t« ./client.h:59: Fehler: expected »=«, »,«, »;«, »asm« or »__attribute__« before »*« token ./client.h:60: Fehler: expected declaration specifiers or »...« before »account_t« In file included from ./accountlist.h:24, from main.c:35: ./client.h:44: Fehler: expected declaration specifiers or »...« before »accountlist_t« main.c: In Funktion »main«: main.c:541: Warnung: Übergabe des Arguments 5 von »client_new« von inkompatiblem Zeigertyp main.c:541: Fehler: zu viele Argumente für Funktion »client_new«
Leider kann ich mit dem Fehler nicht viel anfangen - geht das überhaupt?
P.S: Zeile 1-19 ist die Lizenz, die ich aus Platzgründen weggelassen habe - also nicht wundern wegen den Fehlerzeilen.
mfg blan
-
kann ich in C Cross-Includes machen? Also eine Datei accountlist.h bindet die client.h ein und umgekehrt? Bei mir kommen da jedenfalls immer einige Fehler.
ja
muss ein syntax fehler sein, semicolons vergessen?
-
Generell ist das machbar! Es ist aber alles andere als schöner Programmierstil
und meistens nicht notwendig.Schau die mal genau an, was du von den einzelnen Headerfiles wirklich
in den anderen brauchst und speicher sie separat in ein eigenes File.
Vielleicht reicht es ja, wenn du im Headerfile lediglich typedefs und
Funktionsdeklarationen stehen hast.Wenn das nicht geht, dann bau deine Headerfiles so auf, dass die Teile,
die client.h von accountlist.h braucht vor der Zeile#include "client.h"
im Headerfile von accountlist.h steht,
und umgekehrt.client.h
#ifndef _MSD_CLIENT_H_ #define _MSD_CLIENT_H_ #include <libmsd/msd.h> #include <pth.h> #include <arpa/inet.h> #include <mysql/mysql.h> #include <unistd.h> #include <fifo.h> #include <config.h> #include <banlist.h> #include <streamlist.h> #include <playlist.h> #include <util.h> [... Definitionen und Deklarationen die in accountlist.h benötigt werden ...] #include <accountlist.h>
accountlist.h
#ifndef _MSD_ACCOUNTLIST_H_ #define _MSD_ACCOUNTLIST_H_ #include <libmsd/msd.h> #include <list.h> #include <config.h> #include <account.h> [... Definitionen und Deklarationen die in client.h benötigt werden ...] #include <client.h>
Ich wage es mal zu bezweifeln, dass du soooooo viele includes in
den Headerfiles wirklich brauchst.Gruß mcr
-
okay danke, es scheint zu funktionieren. wichtig ist, dass man die typedefs immer vor das #include schreibt
warum sollte ich nicht soviele header benötigen? jedes teil des programms hat seine eigene header und source -datei und die binde ich halt dort ein wo ich sie brauche?
mfg blan
-
blan schrieb:
okay danke, es scheint zu funktionieren. wichtig ist, dass man die typedefs immer vor das #include schreibt
warum sollte ich nicht soviele header benötigen? jedes teil des programms hat seine eigene header und source -datei und die binde ich halt dort ein wo ich sie brauche?
mfg blan
Normalerweise findet man in Headerfiles lediglich die Funktions- und Typen-
deklarationen, so dass man Headerfiles in Headerfiles lediglich für
Typdeklarationen benötigt, die auch in einem Headerfile vorkommen.Gruß mcr
-
mcr schrieb:
blan schrieb:
okay danke, es scheint zu funktionieren. wichtig ist, dass man die typedefs immer vor das #include schreibt
warum sollte ich nicht soviele header benötigen? jedes teil des programms hat seine eigene header und source -datei und die binde ich halt dort ein wo ich sie brauche?
mfg blan
Normalerweise findet man in Headerfiles lediglich die Funktions- und Typen-
deklarationen, so dass man Headerfiles in Headerfiles lediglich für
Typdeklarationen benötigt, die auch in einem Headerfile vorkommen.Gruß mcr
sprich alle sonstigen includes werden in den sources gemacht?
mfg blan
-
ja. eben da, wo sie gebraucht werden.