07.10.2013 Aufrufe

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

Vorlesungsskript - Hochschule Emden/Leer

MEHR ANZEIGEN
WENIGER ANZEIGEN

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.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!