Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Sie wollen auch ein ePaper? Erhöhen Sie die Reichweite Ihrer Titel.
YUMPU macht aus Druck-PDFs automatisch weboptimierte ePaper, die Google liebt.
c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 62<br />
Gefährlicher sind implizite Umwandlungen, wenn dadurch Informationen verlorengehen,<br />
z. B. durch Zuweisung eines double-Wertes an ein int (gebrochener Anteil wird abgeschnitten,<br />
ggf. Bereichsüberschreitung) oder eines int-Wertes an ein char (Gefahr der Bereichsüberschreitung).<br />
Meist warnt der Compiler dabei; dann sollte eine explizite Typumwandlung<br />
durchgeführt werden (5.64), um diese Warnungen zu vermeiden.<br />
(5.64) Explizite Typumwandlungen 〈type cast〉<br />
(a) C++(neu) Neuer Operator (Op2h):<br />
static cast(Ausdruck)<br />
Hierdurch wird die Umwandlung von Ausdruck in Typ durchgeführt, und zwar mit Prüfung<br />
schon zur Kompilationszeit, ob eine solche Umwandlung überhaupt sinnvoll ist.<br />
Bsp int i; double d=34.9; i=static cast(d);<br />
(b) C++ △! Op2c; hierdurch können auch ” unsinnige“ Umwandlungen durchgeführt werden,<br />
daher gefährlicher! Schreibweise des neuen Typs wie ein Funktionsname; nur möglich, wenn<br />
der neue Typ ein Name ist.<br />
Bsp int i; double d=34.9; i=int(d);<br />
(c) C/C++ △! Op3i, Wirkung wie Op2c, jedoch nicht so übersichtlich; hier kein TypName wie bei<br />
Op2c erforderlich.<br />
Bsp int i; double d=34.9; i=(int)d;<br />
△! Wegen der Gefährlichkeit und Unübersichtlichkeit gelten die beiden letzten Umwandlungen<br />
(b,c) inzwischen als ” missbilligt“ (Str3/Kap. B.2.3).<br />
Es gibt viele Umwandlungen, die zumindest für den Anfänger sehr gefährlich sind, da<br />
er die Folgen nicht übersehen kann. Daher unbedingt die Empfehlung im folgenden<br />
Kasten beherzigen!<br />
Bei Compilerwarnungen in Hinsicht auf Typumwandlungen sollen Sie zunächst überlegen,<br />
ob der Compiler das meint, was Sie meinen. Falls ja, benutzen Sie static cast<br />
(a); dann sollte die Warnung nicht mehr erscheinen.<br />
↑↑1 Genaueres über Typumwandlungen, insbesondere implizite, siehe (Cpp/Kap. 7).<br />
↑↑2 Andere Typumwandlungsoperatoren Op2i-k siehe C ++-Bücher, zu reinterpret cast s. a.<br />
(10.24 Anm4) und (12.63a, 12.64a).<br />
(5.65) Datentyp Zeiger 〈pointer〉<br />
(a) Der Datentyp Zeiger ist dadurch charakterisiert, dass sein Wert als Adresse einer anderen<br />
Variablen interpretiert wird, der Zeiger ” zeigt“ auf einen anderen Speicherplatz.<br />
↑↑ Näheres hierzu, insbesondere die Definiton, Benutzung mit zugehörigen Operatoren s. (Kap.<br />
10.2)<br />
(b) WICHTIG jedoch in diesem Zusammenhang:<br />
Ein Arrayname durch den Compiler automatisch umgewandelt in einen Zeiger auf das erste<br />
Array-Element (Element mit Index 0). Überraschende Folgerungen bei Funktionen mit<br />
Array-Parametern siehe (7.46); dieses ist auch der Grund, warum Arrays nicht durch Zuweisung<br />
kopiert werden können (5.52).<br />
5.7 Präprozessor<br />
(5.70) Übb Der Präprozessor ist ein Textprozessor, der den Quelltext bearbeitet, bevor der Compiler<br />
den Text sieht. Er arbeitet zeilenorientiert – unabhängig von der C ++/C-Syntax. In<br />
älteren Programmen, insbesondere in C, werden Präprozessoreigenschaften sehr intensiv benutzt.<br />
In C++(neu) ist das meist nicht mehr nötig, da bessere Konstrukte zur Verfügung<br />
stehen.<br />
Geblieben jedoch ist die Benutzung des #include (5.74), ferner die bedingte Kompilierung<br />
(5.75): jede später durch Sie erstellte Headerdatei (8.24) muss einen Include-Wächter haben