Menu

Was ist C? Die Programmiersprache hinter allem anderen

C ist eine kleine, schnelle, kompilierte Sprache von 1972, die noch immer Betriebssysteme, Datenbanken und nahezu jedes eingebettete Gerät antreibt. Hier steht, was sie ist, wo sie läuft und warum sie sich 2026 noch zu lernen lohnt.

Diese Seite enthält ausführbare Editoren - bearbeiten, ausführen und Ausgabe sofort sehen.

C ist eine kompilierte Allzweck-Programmiersprache, die Dennis Ritchie 1972 in den Bell Labs schuf, um das Betriebssystem Unix zu schreiben. Sie hat fast alles aus ihrer Zeit überlebt, und der Grund ist einfach: C sitzt eine dünne Schicht über der Maschine. Es gibt dir direkten Zugriff auf den Speicher und auf die echten Fähigkeiten der CPU und liest sich dabei trotzdem wie etwas, das ein Mensch geschrieben hat.

Ein halbes Jahrhundert später ist es weiterhin die Sprache, in der andere Sprachen gebaut werden.

Ein vollständiges C-Programm

Hier ist die Gestalt der ganzen Sprache in sechs Zeilen. Drücke Run.

#include <stdio.h> holt die Deklarationen der Standardein- und -ausgabe herein, damit printf bekannt ist. main ist, wo jedes C-Programm beginnt. printf schreibt Text, \n ist ein Zeilenumbruch, und return 0 sagt dem Betriebssystem, dass das Programm erfolgreich endete. Das ist ein vollständiges, übersetzbares Programm - es gibt keine Klasse, in die man es wickeln müsste, und kein Rahmenwerk darunter.

Was C anders macht

Die meisten modernen Sprachen verbergen die Maschine vor dir. C tut das bewusst nicht.

  • Es wird zu nativem Code übersetzt. Ein C-Programm wird zu Maschineninstruktionen für eine CPU und läuft direkt, ohne Interpreter und ohne virtuelle Maschine dazwischen.
  • Du verwaltest den Speicher selbst. Es gibt keine automatische Speicherbereinigung. Du forderst Speicher an und gibst ihn zurück. Das ist mehr Arbeit, und es ist auch der Grund, warum C-Programme so wenig Speicher brauchen und ein so vorhersehbares Zeitverhalten haben.
  • Es ist klein. C hat etwa 32 Schlüsselwörter. Du kannst die ganze Sprache im Kopf behalten, was für C++, Java oder Python nicht gilt.
  • Es gibt fast keine Laufzeitumgebung. Ein C-Programm kann auf einem Mikrocontroller mit ein paar Kilobyte RAM und ganz ohne Betriebssystem laufen.

Der Handel ist Ehrlichkeit vor Sicherheit. C lässt dich über das Ende eines Arrays hinauslesen oder bereits freigegebenen Speicher benutzen, und es hält dich nicht auf. Diese Fehler haben Namen - Segmentierungsfehler, Speicherlecks, undefiniertes Verhalten - und C zu lernen heißt größtenteils, sie zu vermeiden lernen.

Wo C tatsächlich läuft

C ist keine historische Kuriosität. Es läuft auf dem Gerät, auf dem du das liest, und zwar mehrfach.

  • Betriebssysteme. Der Linux-Kernel umfasst rund 30 Millionen Zeilen C. Große Teile von Windows und von Apples Kernel sind ebenfalls C.
  • Eingebettete Systeme. Mikrocontroller in Autos, Thermostaten, medizinischen Geräten, Routern und Waschmaschinen werden überwiegend in C programmiert. Wenn der ganze Chip 32 KB Speicher hat, ist C oft die einzige realistische Möglichkeit.
  • Datenbanken. SQLite, PostgreSQL, MySQL und Redis sind C-Programme.
  • Sprachlaufzeiten. CPython, der Referenzinterpreter für Python, ist in C geschrieben. Ebenso Rubys MRI, PHPs Zend-Engine und der Kern von Lua. Wenn Python „zu langsam" ist, ist die Lösung meist eine C-Erweiterung.
  • Werkzeuge und Bibliotheken. Git, curl, FFmpeg, OpenSSL, zlib, wieder SQLite - die Infrastrukturschicht der Datenverarbeitung ist C.

Deshalb zählt auch Cs binäre Anwendungsschnittstelle: Fast jede Sprache kann eine C-Funktion aufrufen. Python, Rust, Go, Java und JavaScript haben alle einen Weg, in C-Bibliotheken hineinzugreifen. C ist die Verkehrssprache zwischen Sprachen.

Warum C lernen

Es gibt zwei ehrliche Antworten, und sie zielen auf verschiedene Leute.

Wenn du an Systemen arbeiten willst - Kernen, Treibern, eingebetteter Firmware, Datenbanken, Spiele-Engines -, ist C die Arbeitssprache dieses Feldes, und die meisten Stellenausschreibungen in diesen Bereichen nennen es ausdrücklich (oft neben C++ oder Rust). Es ist schwer, zu Linux, PostgreSQL oder einer Mikrocontroller-Codebasis beizutragen, ohne C mühelos zu lesen.

Wenn du in der Sprache, die du bereits benutzt, besser werden willst, lehrt dich C, was darunter liegt. Nach C weißt du, warum ein Arrayindex bei null beginnt, was eine Zeichenkette wirklich ist, warum es teuer ist, ein großes Objekt als Wert zu übergeben, was Stack und Heap sind und worauf ein Nullzeiger tatsächlich zeigt. Diese Begriffe tauchen in jeder Sprache auf; in C sind sie sichtbar statt verborgen.

Dieses Programm ist drei Zeilen C und zugleich eine vollständige Vorführung dessen, was eine Variable ist: eine benannte Schachtel an einer Adresse. In den meisten Sprachen kannst du diese Frage nicht einmal stellen.

C und C++

C++ begann 1979 als „C mit Klassen" und wuchs zu einer der größten existierenden Sprachen heran: Klassen, Templates, Ausnahmen, Operatorüberladung, die STL, intelligente Zeiger und eine Standardbibliothek, die Cs gesamte Spezifikation in den Schatten stellt.

Das Verhältnis in der Praxis:

  • C++ behielt Cs Syntax, if, for, while, Operatoren, Zeiger und Arrays sehen in beiden gleich aus.
  • Das meiste gut geschriebene C kompiliert als C++, mit ein paar Ausnahmen (C++ verlangt zum Beispiel einen Cast des Ergebnisses von malloc).
  • C++-Code ist fast nie gültiges C.

Wenn du beides lernen willst, ist es ein echter Vorteil, zuerst C zu lernen: C++ baut direkt auf Cs Speichermodell auf, und die Teile von C++, die Leute am meisten verwirren - Zeiger, Referenzen, Kopiersemantik, Destruktoren -, sind allesamt Antworten auf Probleme, die C dir unverhüllt zeigt.

C ist aber in keinem offiziellen Sinn eine Teilmenge von C++. Es sind getrennte Standards, die sich getrennt entwickeln, und modernes C hat Merkmale, die C++ nicht hat (benannte Initialisierer kamen mit C99, restrict-Zeiger und Arrays variabler Länge).

Welches C: die Standardversionen

C ist standardisiert, und die Version zählt, wenn du älteren Code liest.

StandardJahrWissenswert für
C89 / C901989Die uralte Grundlinie. Variablen nur am Anfang eines Blocks deklariert.
C991999//-Kommentare, Variablen überall deklarieren, bool über stdbool.h, long long
C112011Threads, Atomics, sicherere Bibliotheksfunktionen
C172018Eine Fehlerkorrektur von C11 - heute die übliche Voreinstellung
C232024true/false/bool als Schlüsselwörter, nullptr, Binärliterale

Diese Dokumentation zielt auf C17 und weist auf C99+-Merkmale hin, wo es darauf ankommt. Compiler verwenden standardmäßig etwas Modernes, aber du kannst es ausdrücklich sagen:

gcc -std=c17 -Wall -Wextra hello.c -o hello

Was C nicht hat

Zu C zu gehört auch zu wissen, was fehlt, denn fast jede „Wie mache ich ..."-Frage hat hier eine andere Antwort als in einer modernen Sprache.

  • Keine Zeichenketten. Eine C-Zeichenkette ist ein char-Array, das mit einem Nullbyte endet. Zwei davon zu verketten heißt, eine Funktion aufzurufen und sich zu sorgen, ob das Ziel groß genug ist.
  • Keine Sammlungen. Keine Listen, Abbildungen oder Mengen. Du bekommst feste Arrays und Zeiger; eine Hashtabelle ist etwas, das du schreibst oder als Bibliothek dazulinkst.
  • Keine Ausnahmen. Funktionen melden einen Fehlschlag, indem sie einen besonderen Wert liefern - -1, NULL oder einen Statuscode - und der Aufrufer soll prüfen.
  • Keine generischen Typen und keine Überladung. Ein Funktionsname bedeutet eine Funktion. Deshalb hat die Standardbibliothek abs, labs und fabs für drei verschiedene Typen.
  • Keine Namensräume oder Module. Jede Nicht-static-Funktion teilt sich einen globalen Namensraum, weshalb C-Bibliotheken alles mit einem Präfix versehen (sqlite3_open, png_read_info).
  • Keine automatische Speicherbereinigung. Jedes malloc braucht ein passendes free, und es zu vergessen ist ein Speicherleck.

Nichts davon ist ein Versehen. Einiges ist Laufzeitmaschinerie, die C nicht mitschleppen will (ein Garbage Collector, das Abwickeln von Ausnahmen, wachsende Zeichenketten), was zu einem großen Teil erklärt, warum es auf einen Chip mit 2 KB RAM passt; anderes, wie Namensräume und Generics, sind Sprachmerkmale, die dem Entwurf von C schlicht nachfolgen und draußen blieben, um die Sprache klein zu halten.

Der Puffer hat 32 Bytes, weil du entschieden hast, dass das reicht. C prüft es nicht, und diese Entscheidung ist das ganze Wesen der Sprache in einer Zeile.

Ist C schwer?

C ist klein, aber unnachgiebig. Es gibt nicht viel Syntax auswendig zu lernen - du kannst die ganze Sprache in einer Woche lesen. Was Zeit braucht, ist die Disziplin: zu verfolgen, wem welches Stück Speicher gehört, daran zu denken, dass eine Zeichenkette nur Bytes mit einer Null am Ende sind, zu prüfen, dass ein Zeiger nicht null ist, bevor du ihm folgst.

Der größte Teil der Schwierigkeit von C liegt nicht in seinen Begriffen, sondern in seinem Mangel an Leitplanken: Der Compiler rettet dich nicht vor einem Schreibzugriff außerhalb der Grenzen oder einem hängenden Zeiger, du lernst also, genau zu sein. (Zeiger selbst kosten beim ersten Mal echte Mühe - das ist normal, und das Kapitel über Zeiger geht sie langsam an.) Diese Genauigkeit ist eine Fähigkeit, die sich auf jede Sprache überträgt, die du danach benutzt.

Häufig gestellte Fragen

Was ist die Programmiersprache C?

C ist eine kompilierte Allzweck-Programmiersprache, die Dennis Ritchie 1972 in den Bell Labs schuf. Sie gibt dir direkte Kontrolle über den Speicher und bildet eng ab, was die CPU tatsächlich tut, weshalb Betriebssysteme, Gerätetreiber und Datenbanken noch immer darin geschrieben werden.

Wofür wird C heute benutzt?

Betriebssystemkerne (Linux, Teile von Windows und macOS), eingebettete Firmware in Autos, Haushaltsgeräten und Mikrocontrollern, Datenbanken wie SQLite und PostgreSQL, Sprachlaufzeiten wie CPython und Redis, und leistungskritische Bibliotheken, die andere Sprachen aufrufen.

Lohnt sich C im Jahr 2026 noch zu lernen?

Ja, aus zwei Gründen. Es ist weiterhin die Sprache der System- und Embedded-Arbeit, und das ist ein großes, gut bezahltes Feld. Und es lehrt, wie Speicher, Zeiger und der Stack wirklich funktionieren - Wissen, das dich in jeder anderen Sprache besser macht, weil die meisten davon in C implementiert sind.

Was ist der Unterschied zwischen C und C++?

C++ begann als „C mit Klassen" und behielt den größten Teil der C-Syntax, während es objektorientierte Programmierung, Templates, die Standardbibliothek und vieles mehr hinzufügte. C ist weit kleiner: keine Klassen, keine Ausnahmen, keine generischen Typen. Das meiste gültige C kompiliert als C++, aber nicht umgekehrt.

Coddy programming languages illustration

Lerne mit Coddy zu programmieren

LOS GEHT'S