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.

36 2. Datentypen und Variablen<br />

Dimensionen mit ihren jeweiligen Größen angegeben. Dass hier wieder e<strong>in</strong>e<br />

implizite Initialisierung stattf<strong>in</strong>det, versteht sich von selbst. Diese Matrix<br />

wird <strong>in</strong> den Zeilen 36–42 Element für Element ausgegeben.<br />

Die Zeilen 13–15 zeigen, wie man mehrdimensionale Arrays explizit <strong>in</strong>itialisiert,<br />

nämlich Zeile für Zeile! Jede Zeile für sich wird <strong>in</strong> e<strong>in</strong>en Block<br />

verpackt (<strong>in</strong>dem man sie <strong>in</strong> geschwungene Klammern e<strong>in</strong>schließt). Die e<strong>in</strong>zelnen<br />

Blöcke, je e<strong>in</strong>er für e<strong>in</strong>e Zeile, werden <strong>in</strong> gewohnter Manier durch<br />

Beistriche getrennt und <strong>in</strong> e<strong>in</strong>em umschließenden Block zusammengefasst.<br />

So weit kl<strong>in</strong>gt das alles ganz logisch und man vermutet, dass man auf diese<br />

Weise auch e<strong>in</strong>fach wieder das Erraten des Fassungsvermögens für die e<strong>in</strong>zelnen<br />

Dimensionen dem Compiler überlassen kann. In Zeile 13 erkennt man<br />

allerd<strong>in</strong>gs dabei e<strong>in</strong>e Besonderheit, die auf den ersten Blick eigentlich nicht<br />

ganz verständlich ist: Hier ist die erste Dimension dem Compiler überlassen,<br />

die zweite Dimension aber ist explizit angegeben! Das ist nicht passiert,<br />

weil ich gerade beim Schreiben des Programms <strong>in</strong> e<strong>in</strong>em Zustand schwerer<br />

geistiger Umnachtung war, dies ist tatsächlich verpflichtend! Man darf ausschließlich<br />

die erste Dimension leer lassen, alle weiteren Dimensionen<br />

müssen explizit angegeben werden.<br />

Der Grund für diese, zugegeben etwas komische, E<strong>in</strong>schränkung ist e<strong>in</strong><br />

historischer, wie <strong>in</strong> Zeile 29 demonstriert wird: Es ist nicht verpflichtend,<br />

die e<strong>in</strong>zelnen Zeilen <strong>in</strong> Blöcken zusammenzufassen. Im Pr<strong>in</strong>zip ist es auch<br />

möglich, e<strong>in</strong>fach alles <strong>in</strong> e<strong>in</strong>em Block ane<strong>in</strong>ander zu reihen. Je nach Compiler<br />

und e<strong>in</strong>gestelltem Warn<strong>in</strong>g-Level wird dies zwar heutzutage als gefährlich<br />

beanstandet, dies bedeutet aber nicht, dass es nicht möglich wäre. Der Output<br />

dieses Arrays, der von den Zeilen 68–74 erzeugt wird, zeigt auch, wie<br />

die e<strong>in</strong>zelnen Initialisierungswerte vom Compiler verwendet werden: Es werden<br />

die Elemente e<strong>in</strong>fach der Reihe nach auf die e<strong>in</strong>zelnen Zeilen der Matrix<br />

aufgeteilt. Wenn e<strong>in</strong>e Zeile voll ist, wird mit der nächsten weitergemacht.<br />

Jetzt kann man sich auch ausmalen, woher die E<strong>in</strong>schränkung kommt,<br />

dass nur die erste Dimension leer gelassen werden darf: Woher soll denn der<br />

Compiler erraten können, wie die Aufteilung der Elemente auf die e<strong>in</strong>zelnen<br />

Dimensionen des Arrays erfolgen soll? S<strong>in</strong>d z.B. 12 Elemente nun 2 Zeilen<br />

zu je 6 Spalten oder doch 4 Zeilen zu je 3 Spalten oder...?<br />

Obwohl durch die <strong>in</strong> C ++ erlaubte (eigentlich sogar stark empfohlene)<br />

vollständige blockweise Aufteilung alle Dimensionen für den Compiler ersichtlich<br />

s<strong>in</strong>d, gibt es eben leider noch die von C geerbte Altlast des nicht-<br />

Spezifizierens der e<strong>in</strong>zelnen Sub-Blöcke. Deshalb wurde konsequenterweise<br />

def<strong>in</strong>iert, dass die historische Regel weiterh<strong>in</strong> Gültigkeit hat, dass nur e<strong>in</strong>e<br />

Dimension dem Compiler überlassen werden darf.<br />

Bleiben wir aber bei der sauberen Schreibweise zur Initialisierung: Die<br />

Def<strong>in</strong>ition der Matrix <strong>in</strong> den Zeilen 19–20 zeigt, dass man sich auch bei<br />

beliebig vielen Dimensionen auf die implizite Initialisierung des verbleibenden<br />

Rests durch den Compiler verlassen kann. Auch der Fall, dass “mitten dr<strong>in</strong>”

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!