C

aus GlossarWiki, der Glossar-Datenbank der Fachhochschule Augsburg
Wechseln zu:Navigation, Suche

1 Definition

Die Programmiersprache C wurde von Ken Thompson und Dennis Ritchie in den frühen 70er Jahren für das damals neu entwickelte Betriebssystem Unix entwickelt. Thompson passte zunächst die damals populäre Programmiersprache BCPL (Basic Combined Programming Language) auf seine Bedürfnisse an und nannte die so entstandene Sprache „B“ (nach den Bell Laboratories, in denen die Sprache entwickelt wurde). Aus dieser Sprache entstand dann C.

2 Einführung

C ist eine Programmiersprache, die auf fast allen Computersystemen zur Verfügung steht. Im Gegensatz zu z.B. BASIC (Beginner’s All-purpose Symbolic Instruction Code) gibt es seit der Standardisierung durch das ANSI (American National Standards Institute) relativ einheitliche Implementierungen auf verschiedenen Plattformen. In jedem C-System mit Laufzeitumgebung steht auch die genormte Standard C Library zur Verfügung – diese Standardbibliothek beschreibt Makros und Funktionen, die jedem Compiler zur Verfügung steht. Dies und die bei geschickter Programmierung hohe Leistung der resultierenden Programme erklärt die weiterhin relativ hohe Popularität der Sprache, sowohl im kommerziellen als auch im Open-Source-Bereich.

C eignet sich gut für die Systemprogrammierung. Anders sieht es allerdings bei der Anwendungsentwicklung aus – dort wird C zunehmend durch Sprachen wie C++ (der Erweiterung von C mit der Möglichkeit zur objektorientierten oder auch generischen Programmierung), Java oder auch C# verdrängt.

3 Stärken und Schwächen

3.1 Stärken

- Minimalistischer Sprachumfang: Der kleinste bekannte C-Compiler besteht aus 3742 Bytes C-Code und kann sich selbst übersetzen.

- Zeigerarithmetik ermöglicht die effiziente Behandlung von Array-Zugriffen, Parametern usw.).

- Hardwarenahe Programmierung ist möglich, direkter Umgang mit Bits, Bytes, direkter Speicherzugriff und Zeigerarithmetik.

- Präprozessor zur Spracherweiterung und bedingten Übersetzung.

- Linker (Binder) – C war eine der ersten Sprachen, die das Einbinden von externen vorübersetzten Routinen in der Sprachdefinition berücksichtigt.

- Ein C-Compiler ist nahezu für jede Prozessorarchitektur vorhanden, seien es „historische“ 8-Bit-Prozessoren und einfache Mikrocontroller oder aktuelle 64-Bit-Prozessoren.

3.2 Schwächen

- Nur eingeschränkt typsicher.

- Verglichen mit prozeduralen Sprachen wie etwa das ältere Pascal oder Modula-2 zu wenig klare Syntax, was zu sehr komplexen und fehleranfälligen Compilern führt.

- Zeigerproblematik: man kann Zeiger auf beliebige Stellen des Speichers richten; insbesondere zeigen nicht explizit initialisierte Stack-Variablen oft auf beliebige Stellen des Speichers. Die Folge sind schwer zu entdeckende Fehler.

- Arrays: C kennt zwar den Datentyp Array, allerdings werden Arrays intern immer als Zeiger verwaltet. Gerade die Größe des Arrays wird beim Zugriff allerdings nicht überprüft – deshalb können durch Programmierfehler leicht Speicherbereiche durch illegale Zugriffe auf das Array zur Laufzeit unabsichtlich oder auch gezielt (der gefürchtete Buffer-Overflow, also ein Pufferüberlauf) verändert werden.

- C kennt keine integrierten Zeichenketten, also Strings. Statt dessen wird ein Zeichenfeld verwendet, das mit einem Nullzeichen abgeschlossen ist.

- Portabilitätsprobleme: C schreibt die Speichergröße verschiedener Typen in der Sprachdefinition nicht vor. Dies ermöglicht zwar die Portierung bestehender Programme auf andere, auch neue Prozessoren; allerdings kann es zu Problemen kommen, wenn man von einer festen Speichergröße wie z.B. 32 Bit für einen Integer-Wert ausgeht, dieser aber auf neueren 64-Bit-Prozessoren eine andere Speichergröße aufweist.

4 Bemerkungen

Gerade für Programmieranfänger ist die Zeigerarithmetik anfangs sehr komplex und schwer zu verstehen. C ist durch seine hohe Verbreitung und den aufgeführten Stärken nach wie vor eine beliebte Sprache. Allerdings muss man ganz klar sagen, dass die größte Stärke von C, nämlich seine Zeigerarithmetik und der uneingeschränkten Freiheit des Programmierers bei der Verwendung von Zeigern und der Verwaltung des Speichers gleichzeitig auch seine größte Schwäche ist. Gerade in kritischen Anwendungsbereichen kann ein leichtfertiger Umgang mit Zeigern schnell zu sehr großen Problemen führen.

Auch in Zeiten zunehmender Gefahren durch Viren, Trojanern etc. ist es für den Programmierer sehr wichtig, größte Vorsicht bei der Verwaltung des Speichers in C walten zu lassen – ein Blick auf einschlägige Internetseiten wie z.B. www.heise.de zeigt, dass die meisten Sicherheitslücken in Anwendungen in der Ausnutzung eines Buffer Overflows geschehen – zugegebenermaßen allerdings kein alleiniges Problem der Sprache C.

5 Beispiele

Hier das allseits bekannte und beliebte "Hello-World"-Beispiel in C:

int main(int argc, char* argv[]) {
 printf("Hello World!");
 return 0;
}

6 Quellen

Wenn die Definitionen und/oder die Anmerkungen nicht von einem selbst stammen, sollte man die Quellen angeben:

  • Kernighan und Ritchie, "Programmieren in C", Hanser Verlag
  • Wikipedia.de

Dieser Artikel ist GlossarWiki-konform.
In diesem Artikel sollten die Quellenangaben überarbeitet werden.
Bitte die Regeln der GlossarWiki-Quellenformatierung beachten.