30.06.2013 Aufrufe

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

Softwareentwicklung in C++ - ASC

MEHR ANZEIGEN
WENIGER ANZEIGEN

Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.

YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.

66 3. Operatoren<br />

Was sieht man an unserem kle<strong>in</strong>en Demoprogrämmchen noch, wenn man<br />

den Output näher betrachtet?<br />

• Die ersten 3 Zeilen des Outputs zeigen uns die schon besprochene Plattformabhängigkeit<br />

des Datentyps char, nämlich, dass nicht gesagt ist, ob<br />

er nun <strong>in</strong>tern als signed char oder unsigned char betrachtet wird. Wir<br />

sehen, dass char, signed char und unsigned char <strong>in</strong>tern unter drei verschiedenen<br />

Namen bekannt s<strong>in</strong>d, nämlich c, Sc und Uc.<br />

• Die zweiten 3 Zeilen des Outputs wiederum zeigen uns, dass dies beim Datentyp<br />

short sehr wohl wieder genau def<strong>in</strong>iert ist, denn der <strong>in</strong>terne Name<br />

von short und signed short ist derselbe (s), wogegen unsigned short,<br />

wie zu erwarten, den <strong>in</strong>ternen Namen Us trägt. Für die Datentypen <strong>in</strong>t,<br />

long und long long gilt dasselbe wie für short. Aus Gründen der Platzersparnis<br />

wurden die entsprechenden Programmzeilen hier nicht verewigt.<br />

Leser, die me<strong>in</strong>en Aussagen nicht ohne Kontrolle trauen, können gerne zur<br />

Überprüfung die entsprechenden Zeilen im Programm ergänzen :-).<br />

• Vergleicht man z.B. den <strong>in</strong>ternen Namen unseres mittels typedef <strong>in</strong><br />

user_types.h def<strong>in</strong>ierten Typs <strong>in</strong>t32 mit dem <strong>in</strong>ternen Namen e<strong>in</strong>es “echten”<br />

<strong>in</strong>t, so kommt man e<strong>in</strong>er Begriffs-Fehlverwendung aus den Urzeiten<br />

von C auf die Spur: Intern besitzen beide, also <strong>in</strong>t32 und <strong>in</strong>t denselben<br />

Typ, sie s<strong>in</strong>d also nicht nur kompatibel, sondern sie s<strong>in</strong>d tatsächlich<br />

äquivalent und dementsprechend zur Laufzeit nicht mehr vone<strong>in</strong>ander zu<br />

unterscheiden. Was sagt uns das? Nun, ganz e<strong>in</strong>fach: typedef dient nur<br />

dazu, dem Compiler e<strong>in</strong>en H<strong>in</strong>weis zu geben, dass da e<strong>in</strong> Typ <strong>in</strong>t32 verwendet<br />

wird, der aber <strong>in</strong> Wirklichkeit e<strong>in</strong> <strong>in</strong>t ist. Der Compiler nimmt das<br />

h<strong>in</strong> und macht <strong>in</strong>tern aus jedem <strong>in</strong>t32 e<strong>in</strong>en “echten” <strong>in</strong>t. Rekapitulieren<br />

wir nun noch kurz, was es zum Thema Def<strong>in</strong>ition und Deklaration zu sagen<br />

gibt, dann erkennen wir, dass es sich bei typedef nicht, wie suggeriert,<br />

um e<strong>in</strong>e Typ-Def<strong>in</strong>ition, sondern eigentlich nur um e<strong>in</strong>e Typ-Deklaration<br />

handelt! Von Rechts wegen müsste es also typedecl heißen und nicht<br />

typedef. Ich gebe ja zu, dass es sich hier um e<strong>in</strong>e Spitzf<strong>in</strong>digkeit handelt,<br />

aber man sieht daran, dass auch <strong>in</strong> der Computerwelt nicht immer alles so<br />

genau ist, wie es se<strong>in</strong> sollte.<br />

• In den letzten 4 Zeilen des Outputs erkennt man, was der hier verwendete<br />

Compiler aus Namen von zusammengesetzten Datentypen wie Unions<br />

und Structures macht: Der Name, der der Structure bzw. Union gegeben<br />

wurde, wird auch <strong>in</strong>tern beibehalten, allerd<strong>in</strong>gs bekommt er e<strong>in</strong>e Zahl als<br />

Präfix. Diese wird bei g++ zu Laufzeit-Optimierungszwecken verwendet.<br />

Ja, ok, jetzt gehe ich endgültig zu weit. Ich höre schon auf damit... :-).<br />

Mit dem Wissen über die Möglichkeiten des Herausf<strong>in</strong>dens von Information<br />

über Datentypen bewaffnet, haben wir jetzt das notwendige Handwerkszeug,<br />

um die verschiedenen Cast-Operatoren zu begreifen, die es <strong>in</strong> C ++ gibt. Also<br />

stürzen wir uns <strong>in</strong>s Vergnügen und widmen diesen Casts e<strong>in</strong>en näheren Blick.

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!