Aktuelles Lexikon   C/C++

Anfang der 70er Jahren haben zwei Wissenschaftler in ein Forschungslabor ( Bell Labs) in den USA, Ken Thompson und Dennis Ritchie, eine Sprache entwickelt mit der sie einen Betriebssystem, UNIX, entwickelten. Viele von die Konstruktionen in dieser Sprachen stammten von einer Programmiersprache Namens B, der aus einer Systemprogrammierungssprache BCPL entstand. Die Debatte über den geeignetesten Namen für ein C Nachfolger, P oder D, wurde in den 80er Jahre durch Bjarne Stroustroup entschieden als er seine aus C entstandendene Sprache C++ nannte (++ ist in C die sog. "Nachfolger" Operation, die die Inhalt einer Variable um eins erhöht).

Die Sprache C ist gut geeignet für maschinennahe Programmierung und weist trotz einiger höhersprachlichen Konstrukte und Datentypen große Ähnlichkeiten mit Assemblersprachen. Der Syntax ist relativ einfach zu erlernen, aber da viele Konzepte wie Ein- und Ausgabe, Stringverarbeitung, dynamischen Speicherverwaltung usw. in externe Bibliotheken versteckt sind, sind Programme in dieser Programmiersprache oft nicht einfach zu verstehen. Zudem gibt es syntaktische Eigenarten wie die Verwendung von "=" für Zuweisung und "==" für Vergleich (sehr viele andere Programmiersprachen benutzen "=" als Vergleichsoperator) oder die gleiche Anweisung, break, der als Terminator für sowohl Schleifen als auch Mehrfachverzweigungen eingesetzt wird, die häufige Quellen von Programmierfehler sind. Ein größtmöglicher Programmierdisziplin, die üblicherweise erst nach einigen Jahren Programmiererfahrung entsteht, ist erforderlich um erfolgreich in C zu programmieren. Als Lohn winkt ein ablauffähiger Code der sehr effizient und schnell ist. Und da es inzwischen C-Übersetzer und Bibliotheken für fast allen Rechnertypen gibt, hat sich der Sprache sehr verbreitet.

C++ ist weitestgehend aufwärtskompatibel zu C, d.h. Programme, die in C geschrieben sind können relativ einfach mit einem C++-Übersetzer übersetzt werden. Die wichtigsten Erweiterungen sind im Bereich der Typen. C bietet nur einigen einfachen Datentypen an, wie z.B. ganze und reelle Zahlen, Zeichen, Zeiger, Funktionen, Verbunde und Reihungen sowie ein besonderen, leeren Typ void. C++ bietet mit der Definition von Klassen eine Möglichkeit komplexere Datentypen zu konstruieren und Operationen auf Variablen dieser Typen damit zusammen zu packen. Zum Beispiel kann eine Pixel-Klasse vereinbart werden, die der Position eines Pixels vermerkt und weiß, ob es eingeschaltet ist oder nicht. Operationen zum Setzen eines Pixels, zum Wechseln der Zustand oder zum Abfragen des Zustands können aufgenommen werden.

C++ führt auch die Konzept der Vererbung ein, in dem eine Klasse von ein anderes abgeleitet werden kann. Der abgeleiteter Typ kann zusätzliche Komponenten oder Operationen anbieten. Es könnte also eine Klasse für farbige Pixel ColoredPixel definiert werden, die eine Farbkomponente enthält und weitere Operationen zum Setzen und Abfragen der Farbe anbietet. Vererbung bietet eines der Grundlagen für Objektorientiertes Programmierung. Weitere Konzepte wie das Überladen von Funktionsnamen, parametrisierte Klassen und Ausnahmebehandlung gehören auch dazu und werden in C++ angeboten.

Die Sprache C hat immer noch ihren festen Platz in der Systemprogrammierung, trotz aller Unzulänglichkeiten. Über C++ wird im Moment viel geschrieben und einige Firmen setzen es für Neuentwicklungen ein. Es wird sich noch zeigen, ob C++ so viel wartungsfreundlicher und erweiterbar als andere Programmiersprachen sein wird wie von vielen behauptet. Beide Sprachen sind aber für den Schulunterricht ungeeignet, denn es gibt viel zu viele Fallen und dunklen Ecken, die das Erlernen von Programmiersprachenkonzepte unnötig erschweren.


Literatur: Thomas Jell und Axel von Reeken. Objektorientiertes Programmieren in C++. Hanser Verlag, München. 2. Auflage, 1993.

Autor: Debora Weber-Wulff
Erschienen: C & U, Heft XXX