Twitter und Facebook-Anbindung
X
Tweet Follow @twitterapi
!!! Anbindung an twitter und facebook öffnen !!!

Wenn Ihnen mein Online-Buch gefällt,
dann bedanken Sie sich doch mit einer kleinen Spende...

7.2 Beispiel

7.2 Beispiel

Ich benutze für dieses Beispiel weiterhin die Datei "beispiel.cpp" die ich eben erklärt habe. Allerdings möchte ich, die Header-Datei so absichern, dass sie niemals zweimal eingebunden wird.

beispiel.h
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
								
// Nur wenn noch nicht geschrieben wurde "Ich bin da"
#ifndef BEISPIEL_H
	// Schreie "Ich bin da"
	#define BEISPIEL_H
	
	// Erste Überschrift
	void Ausgabe(int iWert);

	// Zweite Überschrift
	int Addiere(int iSummand1, iSummand2);

	// Dritte Überschrift
	void Tausche(int &iZahl1, int &iZahl2);
#endif
								
main.cpp
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
								
#include <stdio.h>
#include "beispiel.h"



// Hauptfunktion der Anwendung ////////////////////////////////////////////////
int main(int argc char** argv) {
	int iWert1;
	int iWert2;

	printf("Bitte irgendeine Zahl eingeben:  ");
	scanf("%i", iWert1);

	printf("Bitte eine andere Zahl eingeben: ");
	scanf("%i", iWert1);
	
	Ausgabe(Addiere(iWert1, iWert2));
	
	Tausche(iWert1, iWert2);
	Ausgabe(iWert1);
	Ausgabe(iWert2);

	return 0;
} // main /////////////////////////////////////////////////////////////////////
								

Ausgabe:

Bitte irgendeine Zahl eingeben:  5
Bitte eine andere Zahl eingeben: 8
13
8
5
		

Wie Sie in der Header-Datei sehen können, habe ich "defines" und "ifndef" benutzt, damit es durch Verschachtelungen nicht vorkommen kann, dass ein Header mehrfach eingebunden wird, was zur Folge hätte, dass der Linker nicht mehr weiß, welcher Funktionsprototyp zu welcher Funktionsimplementierung gehört.

Um dies zu verdeutlichen, habe ich mir mal ein komplexeres Beispiel ausgedacht.

Struktur eines größeren Projektes

Die roten Pfeile stellen die tatsächlichen "includes" dar, während die gelben zeigen, was indirekt mit eingebunden wird.

Warum muss man jetzt also die Header vor einem doppelten Import schützen? Nun, die "main.cpp" braucht die "Volumen.h" und die wiederum die "MathematischenKonstanten.h" und jene die "Textbausteine.h". Nun braucht die "main.cpp" aber auch die "Oberflaechen.h", die ihrerseits auch die "MathematischenKonstanten.h" usw. braucht. Dadurch würde in der "main.cpp" zweimal die mathematischen Konstanten und zweimal die Textbausteine stehen. Sie können aber auch nicht einfach erst die "volumen.h" importieren und dann in der "Oberflaechen.h" einfach auf die "includes" verzichten. Theoretisch würde das zwar in diesem Spezialfall klappen, aber dann dürfte niemand die Reihenfolge der "includes" ändern und Sie könnten die Funktionalitäten der Oberflächenberechnungen in keinem anderen Projekt verwenden, ohne dass Sie Umbauten vornehmen müssten (die entsprechenden "includes" müssten wieder aufgenommen werden).

Sie sehen also, dass es klug ist, sich solche s.g. Includewächter mit "ifndef" zu bauen, da man sich dann um keine Konflikte bzw. Dopplungen mehr Sorgen machen muss. Zudem ist es ratsam, sich die Struktur eines Projektes so aufzuzeichnen, wie ich das oben gemacht habe. Dann sieht man, dass man ggf. das eine oder andere "include" gar nicht benötigt (überflüssige "includes" wurden in der oberen Grafik auskommentiert).

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012