07.10.2013 Aufrufe

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

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.

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

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!