Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Vorlesungsskript - Hochschule Emden/Leer
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
c○ Prof. Dr. B. Bartning, HS <strong>Emden</strong>/<strong>Leer</strong> Rumpfskript ” Informatik I/II“ (WS/SS 2010/11) 86<br />
↑↑ Nähere Begründung, vgl. (10.26) und (12.44):<br />
Da Arraynamen nach ihrer Deklaration automatisch (fast) immer in Zeiger auf ihr Element<br />
Nummer 0 umgewandelt werden, sieht ein Arrayname-Gebrauch wie ein CALL BY REFE-<br />
RENCE aus, ist aber tatsächlich ein CALL BY VALUE eines Zeigers, vgl. (5.65b).<br />
In Wirklichkeit wird demnach ein Zeiger übergeben. Dieses ist auch der Grund dafür, dass<br />
innerhalb einer Funktion der Ausdruck<br />
sizeof(ParameterArrayName)<br />
anders interpretiert wird als vielleicht zunächst gedacht: es ist nämlich der Speicherplatzbedarf<br />
des Zeigers (z. B. 4 Byte) – und nicht der Speicherplatzbedarf für das Original-Array,<br />
s. (12.44d).<br />
7.5 Globale und lokale Namen<br />
(7.50) Übb Zunächst werden die Begriffe lokaler Name (nur innerhalb eines Blocks gültig)<br />
und globaler Name (gültig praktisch in der ganzen Programmdatei) vorgestellt (7.51). Eine<br />
einfache Schachtelung von Blöcken wird durch die Verdeckung (7.52) ermöglicht, da durch sie<br />
Namenskonflikte weitgehend vermieden werden können. Für einen guten Programmierstil<br />
ist es unerlässlich zu wissen, dass Variable (fast) nie global sein sollen; globale Konstante<br />
und Typen sind dagegen meist sehr sinnvoll (7.53).<br />
(7.51) Globale und lokale Namen<br />
(a) Namen (z. B. von Variablen oder Typen) heißen lokal (früher auch: intern), wenn sie innerhalb<br />
eines Blocks deklariert werden, vgl. (4.12) und (7.15a). Ihr Gültigkeitsbereich 〈scope〉<br />
reicht von ihrem Deklarationspunkt (direkt hinter den Namen, genauer: hinter 11 dem Deklarator)<br />
bis zum Ende des Blocks, in dem sie deklariert sind. Die formalen Parameter<br />
einer Funktion gelten hierbei als im äußersten Funktionsblock deklariert, d. h. es sind lokale<br />
Namen (7.15e).<br />
△! Aufpassen – bereits in (4.13) erwähnt: im allgemeinen werden lokale Variablen (wenn<br />
sie automatisch sind, s. (8.13)) nicht automatisch initialisiert. Daher sollten Sie sie<br />
explizit initialisieren oder ihnen kurz nach der Definition einen Wert zuweisen.<br />
(b) Namen (z. B. von Variablen oder Typen) heißen global (früher auch: extern), wenn sie<br />
außerhalb von Blöcken deklariert werden. Ihr Gültigkeitsbereich reicht von ihrem Deklarationspunkt<br />
bis zum Ende der Übersetzungseinheit.<br />
(c) Klassenelemente unterliegen dem Gültigkeitsbereich Klasse, s. (9.12a).<br />
(7.52) Namen müssen – in der Ebene ihrer Deklaration – eindeutig sein. Dagegen wird ein (lokaler<br />
oder globaler) Name durch die Deklaration des gleichen Namens in einem untergeordneten<br />
Block verdeckt; bei Verlassen dieses Blocks ist der Name in der alten Bedeutung wieder<br />
verfügbar, vgl. (7.15b).<br />
C++ Auf globale Namen kann – unabhängig von einer Verdeckung – immer zugegriffen<br />
werden mit Hilfe des Bereichsauflösungsoperators :: (Op1a); die Verdeckung von lokalen<br />
Namen kann nicht durchbrochen werden.<br />
Anm Zusammenfassung s. a. (Cpp/5.1); ↑↑ in dortiger Anmerkung sind auch Ausnahmen von obiger<br />
Eindeutigkeitsregel vermerkt.<br />
(7.53) Allgemeine Richtlinien für die Definition und Benutzung globaler Namen:<br />
• Globale Variablen sind in einem Programm kaum durchschaubar, da sie überall<br />
geändert werden können. Daher sind sie (für diesen Kurs) nicht erlaubt. Allgemein<br />
sollten sie vermieden werden wann immer möglich.<br />
• Dagegen machen globale Konstanten häufig Sinn; ihr Wert kann ja nirgendwo<br />
geändert werden.<br />
Übrigens, zur Wiederholung: benutzen Sie symbolische Konstanten anstatt konstanter Zahlen<br />
wo immer möglich, s. (4.72) und (5.44).<br />
• Typnamen sind oft global, so dass sie in der ganzen Programmdatei benutzt werden<br />
können. Die Bedeutung kann nach der Definition nicht geändert werden, daher sind<br />
globale Typen problemlos.