[TUT C++ ] Header files (für Anfänger)

10/20/2010 18:49 black0utCpp#1
Hallo Leute ,

Hier mal ein sehr sehr grundlegendes Tutorial über headers
(einbinden , selber erstellen etc ).


Also nun zu unserem "Tutorial":

Wenn ihr schon Erfahrung in der C/C++ Programmierung habt (wovon ich ausgehe) wird die erste Zeile in eurem Source Code sicherlich so , oder so ähnlich, aussehen :
Code:
#include <iostream> // Beispiel Iostream
Aber was machen wir hier eigentlich ?!

Die Bibliothek IOSTREAM

Grob gesagt :

"Wir inkludieren eine Bibliothek, die bestimmte
Funktionen , Defines ... enthält. In unserem Beispiel (siehe oben) haben wir die Bibliothek IOSTREAM eingebunden .
Der Name IOSTREAM kommt eigentlich von 2 Bibliotheken
ISTREAM und OSTREAM
Istream für die Usereingabe (cin)
Ostream für die Ausgabe (cout , cerr( Fehlerausgabe ) , clog( Fehlerausgabe mit Puffer ) )

Also steht das "I" in IOSTREAM für Input
das "O" für Output
aber wofür steht das STREAM ?

Streams sind ,prinzipiell, dafür verantwortlich , dass das was ihr in die Tastatur "hämmert" auch wirklich auf dem Monitor ausgegeben wird (weiteres führt zu weit vom Thema ab wenn es euch interessierte einfach googelen :-) )
(Mehr dazu :[Only registered and activated users can see links. Click Here To Register...])

Soviel zum Thema IOSTREAM!

Quote:
Eine Bibliothek ist eine Sammlung von .obj-Dateien, die in Ihr Programm eingebunden werden können und ihm zusätzliche Funktionalität verleihen. Dies ist die einfachste Form der Wiederverwertung von einem Code. Es gibt sie, seit die Programmierer begonnen haben Einsen und Nullen in die Wände ihrer Höhlen zu meißeln.
(aus C++ in 21 Tagen )

Aber wie kann ich selber eine Bibliothek / Header Datei erstellen ?

Dies ist eigentlich gar nicht mal so schwierig als allererstes öffnet ihr eure IDE (Entwicklungsumgebung) (in Code::Blocks gibt es die Möglichkeit gleich eine Bibliothek zu erstellen ich werde hier aber die etwas üblichere Methode wählen :-)

Dann tippt ihr folgendes ein :

Code:
//Die Bibliotheken die wir brauchen um Funktionen in UNSERER Bibliothek zu schreiben 

#include < iostream> //1.

#ifndef NAMEVONDEINERBIBLOTHEK_H_   //2.
#define NAMEVONDEINERBIBLOTHEK_H_  //3.
(// sind Kommentare (sollte klar sein ))

1.
Wir binden wie gewohnt eine Bibliothek ein (iostream)

2.
Hier wird es interessant
#ifndef ist eine Präprozessordirektive (googeln) und steht für
"if not defined" (zu deutsch falls nicht definiert)
Er schaut ob es die Bibliothek (NAMEVONDEINERBIBLOTHEK_H_)
schon definiert ist um sicher zu sein , dass eine Bibliothek nicht mehrmals eingebunden wird.

Weiter zu Punkt 3.

3.
Bei Punkt drei wird , falls die Bibliothek nocht nicht definiert ist (siehe Punkt 2. ) definiert und erstellt!.

Puuuh die groben "Konturen" unser Bibliothek stehen also schon müssen wir nur noch unsere NAMEVONDEINERBIBLOTHEK_H_
mit Funktionen "füllen"!

Wir schreiben :
Code:
#include < iostream> //1.

#ifndef NAMEVONDEINERBIBLOTHEK_H_   //2.
#define NAMEVONDEINERBIBLOTHEK_H_  //3.

void hallosagen()
{
cout<<"Hallo\n"; //4.
}
#endif //5.
4.
Wir schreiben eine einfache Funktion , die bei der Ausführung Hallo ausgibt.

5.
#endif
Eine weiter Präprozessordirektive die dem Compiler mitteilt , dass hier der Code zu Ende ist !

Demonstration
Um zu demonstrieren , das wir die Funktion hallosagen()
wirklich aus dieser Bibliothek heraus ausführen können hier ein Programm :

Code:
#include <iostream>
#include "NAMEVONDEINERBIBLOTHEK.h"

using namespace std;

int main(void)
{

hallosagen();
return 0 ;
}

Ausgabe :

Hallo

Bei Fragen und Verbesserungsvorschlägen einfach Comment
posten DANKE

Euer Black0ut !
10/20/2010 22:39 MrSm!th#2
Quote:
Da wir nicht obj Datein einbinden sondern
Header Datein (daher auch das H ) sagen wir dem Linker (googeln ) , dass er eine Header Datei erstellen soll damit wir unsere Funktion am Ende auch benutzen können!
wait...wat?

Wir sagen dem Linker, dass er eine Header Datei erstellen soll, damit die Funktionen auch nutzbar sind? Entweder weißt du nicht, was du da schreibst oder das musst du nochmal gründlich neuformulieren.
Die .h Datei erstellt man selbst, mit dem Texteditor/der IDE und dem Linker ist ziemlich egal, ob es eine .h, eine .cpp oder eine .whatever Datei ist.
Auch, dass man Funktionen "nur" nutzen kann, wenn man sie in einer Header Datei deklariert ist Quatsch.
Was das ganze nun mit obj zutun hat und wie du von obj auf .h kommst, wird auch nicht klar.

Die Erklärungen der Präprozessordirektiven sind teilweise auch Murx und gerade die Erklärung, warum sie da stehen, fehlt; eher gesagt, du hast es nicht verständlich/ausführlich ausgedrückt.


Aber schlussendlich:

Wo ist der Sinn?? o.ô
Jeder, der die Sprache lernt, lernt automatisch auch, dass man nicht nur .cpp Dateien, sondern auch .h Dateien machen kann und darin Funktionen/Klassen seperat deklarieren sollte.
Spätestens, wenn das Tutorial/Buch Klassen erreicht.
Du solltest dir mal selbst die Frage stellen, an wen dieses Tutorial gerichtet ist und was das Ziel ist.
Was sollen sie hiernach besser können als vorher?
10/20/2010 23:33 mydoom#3
^
this and this:

Du solltest zudem auf die Rechtschreibung achten. Es macht keinen Spaß "Sätze", wie
Quote:
[...] Tutorial über headers [...]
Quote:
[...] Wir inkludieren [...] eine Bibliothek ein [...]
zu lesen. Auch die Kommasetzung solltest du dir noch einmal ansehen:
Quote:
sind ,prinzipiell, dafür
10/21/2010 17:10 black0utCpp#4
Erstmal danke für die Kritik ...

Sicherlich stimmt es , dass hier einige Fehler vorliegen (was mir Leid tut ) jedoch ist 90 % richtig und habe es gestern am Stück geschriebn (und bedauerlicherweiße hatte ich Kopfweh)

Ich werde es wohl oder übel nochmal überarbeiten

und zu :
Quote:
Wo ist der Sinn?? o.ô
Jeder, der die Sprache lernt, lernt automatisch auch, dass man nicht nur .cpp Dateien, sondern auch .h Dateien machen kann und darin Funktionen/Klassen seperat deklarieren sollte.
Spätestens, wenn das Tutorial/Buch Klassen erreicht.
Du solltest dir mal selbst die Frage stellen, an wen dieses Tutorial gerichtet ist und was das Ziel ist.
Was sollen sie hiernach besser können als vorher?
ich habe schon tausend mal die Frage gelesen , wie man Header selber erstellt . Also dachte ich mir , dass da doch klärungsbedarf besteht also nochmal sorry wegen dem Linker Ding wird überarbeitet !


Quote:
zu lesen. Auch die Kommasetzung solltest du dir noch einmal ansehen:
Zitat:
sind ,prinzipiell, dafür
Das ist doch richtig! Eine sogenannte Apposition (glaube ich :D)
10/21/2010 18:58 MrSm!th#5
Die Frage stellen dir aber sicher nur Leute, die nur copypasten und keinen Blassen Schimmer über die Sprache haben.
Niemand, der auch nur ansatzweise wirklich die Sprache lernen will, und zwar nicht wie man Autoit meist lernt, sondern richtig, wird dir diese Frage stellen, da es, wie ich schon sagte, nicht gerade schwer ist, eine .txt/.h/.whatever Datei zu erstellen und, dass man Deklarationen extra in einem Header machen kann, sollte im Laufe des Lernvorgangs auch klar werden.

zu der Sache mit dem Komma:
Das hängt davon ab, wie man den Satz betont ;O
10/22/2010 14:40 black0utCpp#6
Okay , sorry Leute wollte nur helfen ....