Forum: PC-Programmierung Include Dateien einbinden


von Ingo L. (grobian)


Lesenswert?

was muss ich beachten wenn ich in meinem Programm selberstellte Include 
Dateien einbinden will.
Konkretes Beispiel..
Ich habe eine Datei mit dem Namen TEXT.h in der einfach nur steht: cout 
<< "gib diesen verdammten Text endlich aus" ;

Versuche ich diese Datei mittels Include in Programm einzubinden mit 
include "Text.h" (Datei steht im Verzeichniss wo auch das Programm ist)
will das irgendwie nicht so recht gelingen.

von Frank W. (Firma: DB1FW) (frankw) Benutzerseite


Lesenswert?

Hast Du schon
1
http://www.mikrocontroller.net/articles/Include-Files_(C)

gelesen ?

( Sorry - ich bekomme den Link nicht als richtigen Link hin - wegen des 
(C) am Ende. Kann mir jemand sagen wie ich das formatieren müsste, so 
dass es geht ?  )

von Stefan B. (stefan) Benutzerseite


Lesenswert?

Die Anweisung steht so wie von dir angegeben nicht in einer Funktion 
drin. Sie steht "im leeren Raum".

Es ist auch gute Programmierpraxis wenn man keine Anweisungen in 
Includedateien packt. Deklarationen gehören in *.h Includedateien. 
Definitionen und Anweisungen gehören in *.c bzw. *.cpp Dateien.

von Stefan B. (stefan) Benutzerseite


Lesenswert?


von Frank W. (Firma: DB1FW) (frankw) Benutzerseite


Lesenswert?

@Stefan B.
Danke !!

von Ingo L. (grobian)


Lesenswert?

Es geht ja jetzt nur um das verstehen des einbindens.
Falls es weiterhilft der Compiler gibt folgende Meldung aus:

17 C:\Dev-Cpp\includesinus.cpp In file included from 
C:\Dev-Cpp\includesinus.cpp
12 C:\Dev-Cpp\TEXT.h expected constructor, destructor, or type 
conversion before '<<' token
12 C:\Dev-Cpp\TEXT.h expected `,' or `;' before '<<' token

von Frank W. (Firma: DB1FW) (frankw) Benutzerseite


Lesenswert?

Überlege es Dir mal folgendermassen.

ein #include wird vom Preprozessor gemacht. Der eigentlich compiler 
bekommt das gar nicht mit.

Die kannst Dir vorstellen, dass der Preprozessor dort wo "#include 
<xxx.h>" steht, wirklich den Inhalt der Datei xxx.h in Deinen Sourcecode 
hineinkopiert.

Du hast z.B.
1
#include "TEXT.h"
2
3
int  main(void)
4
{
5
   ....
6
}

daraus wird
1
cout << "gib diesen verdammten Text endlich aus" ;
2
3
int  main(void)
4
{
5
   ....
6
}

Und - wie Stefan schrieb - die "cout" Anweisung steht im Nirwana.

In die .h Datei soll nur das rein, was an der Stelle, an der das 
#include steht, auch hin dorf und Sinn macht.


Natuerlich könntest Du so was machen :
1
int  main(void)
2
{
3
#include "TEXT.h"
4
5
   ....
6
}

Würde wohl gehen -
aber das ist nicht der Sinn von .h Dateien. Das macht man nicht.

von Ingo L. (grobian)


Lesenswert?

das dass wenig Sinn macht ist mir schon in dem Fall klar. Ich versuche 
hier nur ein Beispiel durzuarbeiten was in einem Buch beschrieben ist 
(natürlich nicht mir dem Text da oben ;-) ). Ich habe die Include 
Anweisung in der Main Funktion, aber irgendwie macht das der Compiler 
nichtmit, und bricht mit der obrigen Fehlermeldung ab. Mir geht es 
momentan mehr darum wo da der Fehler liegt. Ob das cout in der Text.h 
jetzt Sinn macht oder nich, soll jetz mal beiseite gestellt werden. Sinn 
macht die Include Text.h mit sicherheit nicht.

von Karl H. (kbuchegg)


Lesenswert?

Ingo Laabs wrote:

> nichtmit, und bricht mit der obrigen Fehlermeldung ab. Mir geht es
> momentan mehr darum wo da der Fehler liegt.

Der Fehler liegt daran, dass du noch nicht verstehst, wie das 
Zusammenspiel von Präprozessor und eigentlichem Compiler vonstatten 
geht.

> Ob das cout in der Text.h
> jetzt Sinn macht oder nich, soll jetz mal beiseite gestellt werden.

Genau darum gehts aber.
Die Ausgabeanweisung macht an dieser Stelle absolut keinen Sinn und ist 
dort auch nicht erlaubt. Es spielt jetzt keinerlei Rolle, ob du die 
Ausgabeanweisung direkt in deinem includesinus.cpp drinnen stehen hast, 
oder ob die Anweisung über einen #include reingezogen wird. Letztendlich 
sieht der Compiler eh in beiden Fällen dasselbe: Eine Anweisung die 
nicht in einer Funktion enthalten ist.

Und da der Compiler davon ausgeht, dass du das weißt und keinen dummen 
Fehler gemacht hast, versucht er dir in seiner Fehlermeldung irgendwas 
anzubieten, was die Situation retten könnte. Das du wirklich nur einen 
dummen Fehler gemacht hast, hat er nicht erkannt. Und drum ist die 
Fehlermeldung für dich ziemlich nichtssagend.

von Ingo L. (grobian)


Lesenswert?

Ich glaube ich habe es jetzt irgendwie kapiert.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.