11. Variablen I

In C sind Variablen Namen für Speicherplätze, die zusätzlich Information darüber enthalten, wie die Bits in diesem Speicherplatz interpretiert werden sollen (den Typ).

Das ist ein entscheidender Unterschied zu Python. In Python ist die Variable a nur ein Schlüssel in einem Dictionary, das auf irgendwelche Werte verweisen kann – in der Regel wird sich bei jeder Zuweisung zu a die Speicheradresse ändern, auf die a verweist.

In C bedeutet die Zuweisung a=7 so viel wie “Schreibe das Bitmuster, das für den Typ von a die Zahl 7 kodiert, in die Speicherzelle, die du für a reserviert hast”, in Python heißt a=7 “Lasse a auf den Wert 7 vom Typ Integer verweisen”.

Es gibt auch in C einen Mechanismus, der ähnlich wie die Python-Referenzen funktioniert, nämlich die Pointer; zu denen kommen wir aber erst viel später.

Nochmal: In C gehört der Typ zur Variable (statische Typisierung), in Python zum Wert (dynamische Typisierung).

int numberOfLines=0; bedeutet: “Reserviere einen Speicherplatz unter dem Namen numberOfLines und schreibe Null rein. Die Bits stellen eine Ganzzahl dar.” – Definition der Variable.

Gültige Namen in C

Gültige Namen bestehen aus:

  • Buchstabe oder Unterstrich
  • Buchstabe, Unterstrich oder Zahl

Oder in EBNF-Formulierung:

VarName ::= VarOpen {VarChar }
VarChar ::= VarOpen  | "0-9"
VarOpen ::= "A" -"Z"  | "a" -"z"  | "_"

Exkurs: Kommentieren in C

Ein Kommentar sieht in C in der Regel so aus:

/* Some comment,
   may span several lines */

Ähnlich wie die Python-Kommentare (# macht den Rest der Zeile zum Kommentar) funktioniert das durch die C++-Sprachdefinition eingeführte //:

  a++; // C++-Style comment

Auch wenn sie mittlerweile wohl von allen noch verwendeten Compilern aktzeptiert werden und auch vom C99-Standard sanktioniert sind, haben C++-Kommentare meiner bescheidenen Meinung nach in C-Programmen nichts verloren; der wichtigste Grund dafür ist ästhetischer Natur: Der Sprachkern von C ignoriert das Codelayout (ihm ist egal, wo welche Sorte von whitespace ist, insbesondere sind Leerzeichen und Zeilenumbrüche äquivalent), und die C++-Kommentare verletzen diese Regel. Im Präprozessor übrigens ist das anders: Der legt erheblichen Wert auf Zeilenumbrüche an den richten Stellen (z.B. vor Präprozessorinstruktionen) und wird sehr irritiert, wenn Zeilenumbrüche an den falschen Stellen kommen (z.B. in einer Makrodefinition).

Will man große Codeteile auskommentieren (ähnlich wie in Python durch Verwandlung in einen langen String durch """ oder ’’’), macht man das am Besten mit dem Präprozessor:

#if 0
  commented-out stuff
#endif

Bei der Wahl der Inhalte der Kommentare taugen die Leitlinien für Python, auch wenn C natürlich keine Docstrings hat.


Markus Demleitner

Copyright Notice