C Verwirrung mit .h und .c Dateien

Leberkäse

Cadet 3rd Year
Registriert
Juni 2014
Beiträge
36
Servus,
hab mal wieder ein Problem. Ich soll für ein Praktikum in meinem Studium ein Programm vervollständigen. Da das Rahmenprogramm relativ komplex ist, habe ich genaue Anweisungen erhalten was zu machen ist.
Es geht darum, eine Queue in C zu implementieren.
Nun zu meinem Problem. Mir wird in der Anleitung aufgetragen eine neue .c Datei zu erstellen, in die ich dann eine Reihe von Funktionen einfügen soll (Neues Element erstellen, Element Löschen, Queue ausgeben etc.). Den Typ der Listenelemente muss ich aber in einer anderen .h Datei definieren und dann dementsprechend mit #include darauf zugreifen. Soweit kein Problem.

Im nächsten Schritt werde ich angewiesen den gesamten Inhalt der .c datei (nur Funktionen enthalten) in die .h zu kopieren. Begründet wird das wie folgt:

Dies ist erforderlich, damit die Signatur der Funktionen, also ihr
Rückgabetyp, ihr Name sowie die Anzahl und Typen der Argumente
dem Compiler beim verarbeiten der inkludierenden c.-
Datei bekannt sind. Diese Information wird benötigt um den
Übersetzungsvorgang korrekt ausführen zu können. Fehlt diese,
wird das Programm zwar möglicherweise erstellt, kann aber
fatale Fehlfunktionen beinhalten.

Nur leider funktioniert dann gar nix mehr. Wenn ich beide Versionen drin lasse meckert der Compiler die Funktionen wären doppelt definiert. Lasse ich nur die .h Datei drin, heißt es missing definition of function (...) . Lasse ich nur die .c Datei drin heißt es undefined reference to (...) .

Leider hab weder ich, noch meine Komillitonen ne Ahnung wie man das Problem behebt. In der Vorlesung wurde nichts dergleichen besprochen.

Den Code hier zu posten wäre denke ich sinnfrei, da das Problem ja von allgemeiner Natur ist und ich Copyright technisch nicht weis ob ich das darf.

Mfg
 
Ja, nur die Funktionssignatur in die .h - Datei schreiben und mit ; abschliessen.
Dies gilt für alle Funktionen, die in der .c - Datei verwendet werden.
 
Es gibt zwei Möglichkeiten:

Entweder kopierst du alles in die .h-Datei und lässt die .c-Datei komplett weg (not recommended!)

Oder du schreibst alle Funktionen in der .c-Datei und kopierst dann nur die erste Zeile jeder Funktionen-Definition (also nur die Deklaration) in die Header-Datei. Dadurch erklärst du dem Compiler, was der Funktionsname bedeutet und der Linker kann das dann alles zusammenpacken.
 
Wie von meinen Vorrednern schon erwähnt, gehören nur die Prototypen der Funktionen aus der .c in die .h.

also aus
Code:
int func(int a)
in der .c wird
Code:
int func(int a);
in der .h. Das abschließende Semikolon ';' ist dabei wichtig.
Die Variablennamen kannst du dabei auch weglassen, wichtig ist nur deren Datentyp, also geht auch
Code:
int func(int);
in der .h.
 
Zuletzt bearbeitet:
Ach so ist das, vielen herzlichen Dank für die vielen Antworten.
Ergänzung ()

Ok, hätte dann doch nochmal eine Frage. Immer wenn ich das Projekt neu öffne verschwindet die .c Datei. Hab bis jetzt immer eine neue erstellt und dann den inhalt der alten kopiert aber das muss doch auch anders funktionieren.
 
Zurück
Oben