Problem bei der Zerlegung eines C-codes in mehrere Unterdateien
-
Hallo,
ich hab folgendes Problem:
Ich will mein C-Prog. in mehrere Dateien unterteilen. Die genutzten globalen Variablen hab ich in einem header-file abgelegt.
Mein Problem tritt auf, wenn ich in einer Funktion die in einer programmdatei z.B. init.c definiert ist auf eine im Headerfile definierte Variable zugreife. Beim Kompilieren erhalte ich keinen Fehler, doch die Variablen werden dann anscheint nicht richtig verarbeitet.
Ich kann das Problem umgehen, wenn ich die Variablen zu Beginn jedes c-files mit "extern" bekanntmache.
Im meinem Hauptfile kann ich die variablen durch "include header.h" bekanntgeben.
Das geht aber nur in einer unterdatei.
Gibt es da eine edlere Methode als mit extern ?Hoffe ich konnte mein Problem einigermäßen verständlich darstellen.
Bin für jede Hilfe dankbar.
-
Gibt es da eine edlere Methode als mit extern ?
Ne gibts nicht. Mann kann (sollte) Variablen nicht in headern declarieren.
Problem: Der Compiler sieht immer nur ein file ( übersetzungseinheit ) für ihn ist es vollkommen ok wenn du eine variable in einem header declarierst, er liest den header und erzeugt eine variable im zugehörigen .o-file. Verwendet eine ander Übersetzungseinheit den gleichen header macht er es da wieder. Wenn der linker dann die beiden .o - files zu einer Ausführbaren Datei zusammensetzen will dann sieht er mehrere Symbole mit gleichen Namen in verschiedenen object-dateien. Jetzt ist er verwirrt. Welche ist die richtige ?
Kurt
-
Hi ZuK,[edit]Sorry, hab mich wohl im namen vertan... Ich meinte natürlich
floflo[/edit]wenn du in deiner Includedatei einen Includewächter verwendest müsstes du das
Problem in den Griff bekommen.#ifndef MEINEINCLUDE__H //(irgend ein name am besten der deiner Includedatei) #define MEINEINCLUDE__H //Definitionen oder wasweißich #endif
Das führt dazu, dass der Inhalt nur einmal eingebunden wird und wenn irgendwo
Querreferenzen entstehen würden werden diese umgangen.Gruss
Tobi
-
@Tobias Gerg : Nee das hilft überhaupt nichts.
Include-guards verhindern nur das doppelte Einbinden des headers in einer Übersetzungseinheit.
Wenn du eine variable in mehreren Übersetzungseinheiten brauchst hilft nur extern.
Kurt
-
@ZuK,
sorry, jup musste grade das selbe wie ZuK feststellen. Tut mir leid...
Man lernt eben nie aus.Gruss
Tobi