1.2. C im Vergleich zu anderen Programmiersprachen

Je höher eine Programmiersprache ist, desto mehr kann der Entwickler von den Eigenheiten bestimmter Hardware absehen und sich auf diejenigen Mittel konzentrieren, die den zu lösenden Problemen angemessen sind. Prinzipiell steigt also mit der Abstraktion einer Programmiersprache von den Hardwarevoraussetzungen die "Problembezogenheit" der Sprache. Umgekehrt basiert hardware-nahes Programmieren auf der Einsicht in die einzelnen Arbeitsschritte der Maschine. Den Extremfall stellt dabei die Software-Entwicklung mit dem Assembler dar, wo sich der Programmierer für die Lösung seiner Probleme an den Befehlssatz des jeweiligen Prozessors halten muß.

C gilt im Vergleich zu BASIC oder PASCAL nicht als Hochsprache, sondern wird oft als Sprache "mittlerer Ebene" (middle-level language) eingestuft. Diese Einschätzung verdankt C vor allem dem Umstand, daß es dem Programmierer die Möglichkeit bietet, hardware-nah zu programmieren. So erlaubt C beispielsweise, Speicherinhalte direkt über die Speicheradresse zu verändern. Aufgrund dieser Eigenschaft erfreut sich C bei der Entwicklung von Betriebssystemen, Compilern und auch Gerätetreibern großer Beliebtheit und hat dabei dem Assembler weitgehend den Rang abgelaufen.

Allerdings haben diese Leistungsmerkmale auch Nachteile. Zum einen liegt in es der Verantwortung des Programmierers, dafür zu sorgen, daß nicht Speicherbereiche unzulässig überschrieben werden. Die Folgen davon sind nämlich Programm- oder gar Systemabstürze. Außerdem bleibt beim Programmieren in C die Bindung an Maschinenvoraussetzungen zu einem gewissen Grad immer erhalten, auch wenn komplexe Problemstellungen formuliert werden. Die Verwendung von Pointern, die Belegung und Freigabe von Speicher etc. fordern stets Verständnis für die zugrundeliegenden technische Abläufe.

Als "middle-level language" kombiniert C die Möglichkeit, maschinen-nah zu programmieren, mit Elementen, die für moderne Hochsprachen charakteristisch sind. Es unterstützt das Konzept von Datentypen und verfügt über alle hochsprachen-typischen Kontrollstrukturen. Obwohl C dem Programmierer beim Aufbau seiner Programme weitgehende Freiheiten läßt - was ihm den schlechten Ruf einer Sprache für Hacker einbrachte - ist sie vom Konzept her aber eine Sprache für strukturiertes Programmieren.

Die hochsprachlichen Komponenten von C lassen effektive Programmentwicklung zu, weil sie Portabilität und Wiederverwendbarkeit von Programmcode begünstigen. Unter ökonomischen Gesichtspunkten kommt der Ausnutzung der Sprachmöglichkeiten von C durch moderne Programmiertechniken erhöhte Bedeutung zu: Darunter fallen Dokumentierung des Codes durch Kommentierung, strukturiertes Programmieren und getrennte Entwicklung/Compilierung der einzelnen Programm-Module.

Es ist andererseits gerade der ökonomische Aspekt, der C unter Druck von objektorientierten Sprachen bringt. Durch Kapselung und Vererbung sind sie prozeduralen Sprachen wie C besonders bei der Wiederverwendung von Code überlegen. Der neue Superstar unter den Programmiersprachen, Java, beseitigt zudem durch die Abschaffung von Pointern und expliziter Speicherverwaltung tückische Fehlerquellen. Zwar ist C für die Anwendungsentwicklung immer noch sehr populär, aber gerade dort zeichnet sich der Vormarsch der objektorientierten Konkurrenz ab. C ist weiterhin überall dort erste Wahl, wo hardware-nah programmiert werden muß und wo es auf die hohe Ausführungsgeschwindigkeit des Programmcodes ankommt. Daß C noch lange nicht zum alten Eisen gehört, beweist unter anderem das Linux-Projekt. Die Entwicklung dieses UNIX-Clones erfolgt fast ausschließlich in C.

Im Vergleich zu den meisten Hochsprachen verfügt C über einen sehr kleinen Sprachumfang. Während z.B. BASIC für den IBM PC über etwa 159 Schlüsselwörter verfügt, erschöpft sich der Sprachumfang von C in 32 (27 stammen vom Kernighan und Ritchie de facto Standard, 5 fügte das ANSI-Standardisierungs-Komitee hinzu). Diese Überschaubarkeit läßt sich durchaus als Vorteil verbuchen: der C-Grundwortschatz ist mit relativ wenig Aufwand erlernbar.

Reservierte Worte in ANSI-C sind die folgenden:


const		volatile	signed		auto
break		case		char		continue
default		do		double		else
enum		extern		float		for
goto		if		int		long
register	return		short		sizeof
static		struct		switch		typedef
union		unsigned	void		while

Trotz seines relativ kleinen Sprachumfangs und der damit verbundenen Übersichtlichkeit ist C, so merkwürdig es klingen mag, eine Sprache für Programmierer - nicht alle Programmiersprachen wurden nämlich für Programmierer entwickelt. BASIC oder COBOL sind Beispiele dafür. BASIC etwa wurde mit der Absicht entwickelt, gerade Nichtprogrammierern die Möglichkeit zu bieten, relativ kleine Probleme zu lösen.