Dies ist eine alte Version des Dokuments!


Gründe in C programmieren zu lernen

C als Vereinfachung von Assembler

C unterscheidet sich von C#, Java und PHP darin, dass es näher an der Maschine ausgelegt ist - für ein Verständnis von C hilft das Verständnis, wie ein Computer überhaupt arbeitet. Dafür ist es nicht gleich erforderlich Assembler zu lernen. C ist eine (deutliche!) Vereinfachung von Assembler, aber dennoch so maschinennah, dass nahezu keine Geschwindigkeitsverluste bei der Ausführung des Programms entstehen. Auch kann man mit C nahezu alles Wichtige anweisen, was die Maschine zu leisten fähig ist. Nur erfahrene Programmierer können Assemblerroutinen schreiben, die geringfügig schneller sind als ein gut geschriebenes C-Programm. In der Regel kennen die Compiler-Entwickler mehr Strategien, aus einem Quelltext die schnellste Übersetzung zu liefern.

C eignet sich also bestens, um das Verständnis zu trainieren, wie Programme wirklich funktionieren. Es dient als gute Basis, um eine weitere Programmiersprache zu lernen, die objektorientierte Programmierung unterstützt - zum Beispiel C++.

Vielleicht lieber gleich mit C++ anfangen?

Die Grundlage vieler modernen Programmiersprachen, wie C++ und C#, Java und PHP ist die Syntax der Programmiersprache C. Obwohl C bereits 1972 entwickelt wurde, sind viele Konstrukte so grundlegend, dass ihre Syntax in darauffolgenden Sprachen nicht mehr oder nur sehr gering verändert wurde.

C ist Teilmenge von C++. Nahezu alles, was für C gilt, gilt auch für C++. Wer lernen möchte, wie man C++ programmiert, muss auch die gleichen grundlegenden Konstrukte lernen, die man auch C verwendet. Ähnliches gilt auch für Sprachen wie Java und C#.

"C arbeitet mit unsicheren Zeigern"

Java, C# und PHP arbeiten weniger offensichtlich mit Zeigern als C oder C++ - aber sie verwenden sie genauso. Zeiger gelten als beliebte Fehlerquelle, allerdings sind sie unerlässlich, um sinnvolle Programme zu schreiben. Zeiger werden in C und C++ deutlich beim Namen genannt und im Quelltext kenntlich gemacht. Neben Zeigern existieren in C++ Referenzen, die vom Programmierer verlangen, dass sie gültig gesetzt werden und damit niemals ins Leere zeigen dürfen. Damit ist die Hauptfehlerquelle (nahezu) ausgemerzt: Der Zugriff auf einen Null-Zeiger (Null-Pointer). In C#, Java werden Zeiger unter dem Begriff „Referenz“ versteckt und mit Operatoren bedient, die in der verwendeten (C verwandten) Syntax die Sicherheit vorgaukeln, man würde nicht mit Zeigern arbeiten. Dennoch ist auch hier eine der häufigsten Fehlerquellen die „Null-Pointer-Exception“. Java und C# sind also nicht sicherer, nur weil sie Zeiger als „Referenz“ bezeichnen.

Zeiger-Arithmetik 1), die zweite häufige Fehlerquelle, die beherrschen C# und Java nicht. Zeiger-Arithmetik ist allerdings keine Magie, sondern eine Möglichkeit Programme zu beschleunigen. Wird Zeiger-Arithmetik in C nicht verwendet, dann schreibt man eben wie in Java oder C#. Aber man kann. Und wie überall in der Programmierung kann man einen Fehler programmieren.

Zeiger sind ein normales Arbeitsmittel in der Programmierung, sinnvolle Programme ohne Zeiger sind nahezu unmöglich. Zeiger sind allerdings auch wesentlich einfacher zu verstehen, als ihr Ruf den Anschein erweckt.

1)
Addieren von Werten auf einen Zeiger, um einen Zeiger auf eine nachfolgende Adresse zu erhalten