
C ist eine kompilierbare, statisch typisierte, prozedurale Programmiersprache, die Anfang der 1970er Jahre von den US-Amerikanern Dennis Ritchie und Ken Thompson zur Programmierung des Betriebssystems Unix entwickelt wurde. 1983 entwickelte das American National Standards Institute (ANSI) einen Standard der Sprache C, der seitdem auch als ANSI C, Standard C oder C89 bezeichnet wird. Dieser Standard wurde kurz darauf auch von der International Organization for Standardization (ISO) als C90 übernommen, wobei sich C89 und C90 auf dieselbe Version der Sprache C beziehen. Der C-Standard wird seitdem von der internationalen Arbeitsgruppe ISO/IEC JTC 1/SC22/WG14 weiterentwickelt. Die daraus bisher resultierenden Versionen mit den Kurznamen C99, C11 und C18 beziehen sich namentlich jeweils auf ihr Erscheinungsjahr.
Seinen Namen hat C als Nachfolger der Programmiersprache B erhalten, welche wiederum eine Weiterentwicklung der Basic Combined Programming Language (BCPL) ist.
Alleinstellungsmerkmale
C gilt als Mutter moderner Programmiersprachen, auch wenn diese Aussage nicht ganz richtig ist. Viele moderne Sprachen sind in C geschrieben oder haben sich an ihrer Syntax orientiert, darunter C++, C#, Objective-C, Java, JavaScript, Perl und PHP.
C ist die erste Wahl für Hardware-nahe Low-Level-Programmierung und kann hinsichtlich Performance und ressourcenschonender Entwicklung nur noch von Assembler übertroffen werden.
Einsatzbereiche
C wird bevorzugt dort eingesetzt, wo Geschwindigkeit und Speicherverbrauch von großer Bedeutung sind. Die Kernel aller großen Betriebssysteme sind überwiegend in C oder C-Derivaten geschrieben, Unix, Linux, BSD, MacOS, iOS, Android, Solaris, Windows…
Viele Treiber und Datenbanken sind in C programmiert. C ist die dominierende Sprache für eingebettete Systeme. Mit C lässt sich mithilfe von Cross-Compilern für die jeweilige Architektur bare-metal-programming realisieren. Es kann also ohne Betriebssystem direkt gegen die Hardware programmiert werden, ohne dass eine Laufzeitumgebung vorhanden sein muss.
Pros
C ist sehr schnell und ressourcenschonend. In vielen Bereichen, in denen mit C programmiert wird, gibt es keine realistischen Alternativen, weil die Sprache z.B. durch die Hardware vorgegeben wird oder ein so starker Fokus auf Performance liegt, dass man um den Einsatz von C nicht herumkommt. Der Microcontroller Arduino beispielsweise unterstützt neben C und C++ gar keine anderen Sprachen.
C ist eine Sprache, die durchaus auch für Einsteiger interessant ist, da viele Sprachen auf ihr aufbauen und der Einstieg in Sprachen wie C++ und Java wesentlich einfacher fällt, wenn man bereits C erlernt hat. Darüber hinaus ist C eine sehr überschaubare Sprache mit wenigen Schlüsselwörtern und Konzepten.
Ein Vorteil in der Erlernung von C ist auch, dass viele Programmierschnittstellen in C bereitgestellt werden, z.B. die Windows API, ehemals Winapi / Win32 API. Viele Sprachen bieten die Möglichkeit, nativen C-Code auszuführen. Damit lassen sich performancekritische Algorithmen in C-Code auslagern, was selbstverständlich nur machbar ist, wenn man die Sprache C beherrscht.
C bietet Entwicklern einfachen Zugang zur Hardware, weil zum einen Assembly-Code direkt in C eingebunden werden kann, zum anderen viele Hardware-Hersteller Programmierschnittstellen oder Hilfsmethoden zur Ansteuerung ihrer Hardware für C bereitstellen. Hardware, die memory-mapped ist, kann aus C heraus direkt über die Manipulation von Registern und Speicheradressen angesteuert werden.
Mit der Möglichkeit von bare-metal-programming über Cross-Compiler und der Manipulation beliebiger Speicheradressen, solange diese nicht durch Speicherschutz einer Speicherverwaltungseinheit (MMU) verhindert wird, biete C Entwicklern uneingeschränkte Freiheiten.
Cons
Viele Vorteile von C sind auch die größten Nachteile. Durch seinen überschaubaren Funktionsumfang fehlen C viele Konzepte höherer Programmiersprachen, wie Objektorientierung oder Namespaces. Dadurch kann C-Code sehr schnell unübersichtlich werden.
Die manuelle Speicherverwaltung ist ein mächtiges Werkzeug, das aber auch ein hohes Fehlerrisiko mit sich bringt. Pufferüberläufe (buffer overflows) gelten als häufigste Ursache von Bugs in Software und C als eine Sprache, die für diese Art Fehler besonders anfällig ist, da sie im Gegensatz zu anderen Sprachen keine Schutzmaßnahmen gegen Bereichsüberschreitungen zur Verfügung stellt.
Datenblatt
Name | C |
Webseite | http://www.open-std.org/jtc1/sc22 |
Erscheinungsjahr | 1972 |
Aktuellste Version (Stand 8. November 2020) | C18 (ISO/IEC 9899:2018) vom Juni 2018 |
Typisierung | statisch |
Paradigmen | imperativ prozedural |
Pros | Cons |
---|---|
sehr schnell | unterstützt keine höheren Konzepte wie OOP |
sehr ressourcenschonend | keine Namespaces |
weite Verbreitung | Code kann schnell unübersichtlich werden |
einfacher Hardwarezugriff | es ist sehr leicht Fehler zu machen und schwierig Fehler zu vermeiden |
uneingeschränkte Freiheiten durch Zeiger | manuelle Speicherverwaltung |
leicht portierbar | fehlende Typsicherheit |
Grundlage vieler anderer Programmiersprachen |
virtuallet
virtuallet ist ein kleines Programm von mir, welches ich in diversen Programmiersprachen implementiert habe. Hier geht es direkt zum C-Code von virtuallet auf GitLab. Hier gibt es weitere Infos zu virtuallet.