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...

9.5.1 Vereinfachung durch Typdefinitionen

9.5.1 Vereinfachung durch Typdefinitionen

In C hat man die Möglichkeit, sich neue Typen zu erzeugen bzw. für Bestehende einen Aliasnamen zu vergeben. Damit erspart man sich eine komplizierte Schreibweise

Das Schema sie so aus: typedef <ZuErsetzenderTyp> <ZuErsetzenderTyp>;

Angenommen man hat ein Array mit Pointern auf Integer, dann benötigt man folgende Schreibweise.

 1
 2
 3
					
int*	aArray[];
// oder
int**	aArray;
					

Gerade letztere kann Verwirrung stiften und deswegen gibt es von mir an dieser Stelle die Empfehlung, dies durch geeignete Typdefinitionen zu verschönern.

 1
 2
					
typedef	int*		PInteger;	// Pointer auf ein Integer
typedef	PInteger*	AIntArray;	// Array mit Pointern auf Integer
					

Wichtig ist, dass bei einer Typdefinition keine eckigen Klammern benutzt werden können, aber was bringt einem das jetzt genau? Schauen Sie sich dafür folgende zwei Funktionen und deren Aufruf an.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
					
// Variante 1 /////////////////////////////////////////////////////////////////
int** CreateArray1(int iLength) {
	int** pResult		= new int*[iLength];

	// Alle Integer erzeugen
	for (int iCount = 0; iCount < iLength; ++iCount) {
		pResult[iCount]	= new int;
	} // end of for

	return pResult;
} // CreateArray1 ///////////////////////////////////////////////////////////////



// Variante 2 /////////////////////////////////////////////////////////////////
AIntArray CreateArray2(int iLength) {
	AIntArray pResult	= new PInteger[iLength];

	// Alle Integer erzeugen
	for (int iCount = 0; iCount < iLength; ++iCount) {
		pResult[iCount]	= new int;
	} // end of for

	return pResult;
} // CreateArray2 ///////////////////////////////////////////////////////////////



// Hauptfunktion der Anwendung ////////////////////////////////////////////////
int main(int argc, char** argv) {
	int**		pArray1	= CreateArray1(10);	// Variante 1
	AIntArray	pArray2	= CreateArray2(10);	// Variante 2

	delete [] pArray1;
	delete [] pArray2;
	
	return 0;
} // main ///////////////////////////////////////////////////////////////////////
					

Wie Sie sehen können, ist die zweite Variante wesentlich besser lesbar und es wurde kein Stern mehr benutzt. Zudem kann es keine Verwirrung mehr darüber geben, ob man ein Array mit Pointern oder ein Pointer auf einen Pointer hat. Beim Kompilieren wandelt der Präprozessor alle Typdefinitionen um und es resultiert der gleiche Code. Es passiert bei beiden Varianten also haargenau das gleiche. Setzen Sie also ruhig des Öfteren Typdefinitionen ein, um sich den Umgang zu erleichtern. Achten Sie aber darauf, dass die von Ihnen vergebenen Aliasnamen aussagekräftig sind.

Zum Seitenanfang
Zum Inhaltsverzeichnis

© Copyright by Thomas Weiß, 2009 - 2012