mikrocontroller.net

Forum: PC-Programmierung Include Dateien einbinden


Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Frank W. (frankw) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hast Du schon
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 ?  )

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Stefan B. (stefan) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert

Autor: Frank W. (frankw) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
@Stefan B.
Danke !!

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Frank W. (frankw) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht 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.
#include "TEXT.h"

int  main(void)
{
   ....
}

daraus wird
cout << "gib diesen verdammten Text endlich aus" ;

int  main(void)
{
   ....
}

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 :


int  main(void)
{
#include "TEXT.h"

   ....
}

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

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: Ingo Laabs (grobian)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Ich glaube ich habe es jetzt irgendwie kapiert.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.