ProgBeginner hat geschrieben:Hallo zusammen,
Ich habe im ich glaub C++ Tutorial war das gelesen, man solle in den Headerfiles lediglich deklarieren und nichts definieren.
Sprich
Code: Alles auswählen
// blabla.h
int i; // richtig
int i = 4; // schlechte idee
Beides schlecht, denn beides definiert die Variable i. Definieren != Initialisieren

Um eine Variable nur zu deklarieren, schreibst Du 'extern' davor, was bedeutet, dass die Definition halt irgendwo anders ist.
ProgBeginner hat geschrieben:Jetzt habe ich natürlich schon C und C++ Quellcode in Mengen gesehen ( und ja, ich habe sogar im Kernelquellcode von Linux geschnüffelt ^^ - man darf ja neugierig sein ) und solche Konstruktionen in .c - Dateien und .cpp - Dateien gesehen wie:
Also entweder ich verstehe nun #IFNDEF und #DEFINE falsch, oder ich weiss auch nicht - wenn man in nem Header nichts weiter definieren soll, warum dann #IFNDEF und #DEFINE ??
Interessante Frage, die ich so noch gar nicht gefragt wurde und über die ich mir so auch noch keine Gedanken gemacht habe, weswegen die Erklärung dann auch verwirrend sein muss. ^^
Eine Antwort gibt's trotzdem drauf: Präprozessor-Befehle sind Präprozessor-Befehle und keine C- oder C++Anweisungen. Ein #define definiert keine Symbole in C, sondern für den Präprozessor. Das ist okay, denn die kommen so nicht im C-Compiler an.
Der Präprozessor wird vor dem Compiler laufen gelassen, führt Ersetzungen durch (die mit Define beschrieben werden) und fügt Texte ein (per #include) oder lässt Texte weg (#ifndef...). In den Compiler kommt das, was beim Präprozessor hinten raus kommt.
Hier sind zwei Sprachen quasi in Reihe geschaltet.
Du kannst den C-Präprozessor auch unabhängig vom Compiler mit dem Befehl "cpp" aufrufen und damit eigene Probleme unabhängig von C oder C++ lösen. Früher war der Arbeitsspeicher zu klein, um das alles in einem Rutsch zu machen und daher versuchte man eben viele kleine Probleme zu lösen, statt ein Großes.
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.