1.1. Die Entstehung von C
Dennis Ritchie entwickelte C bereits im Jahr 1972, also vor mehr als einem Viertel Jahrhundert, in den Bell Laboratories. Die Sprache entstand als Weiterentwicklung von BCPL und B. Erstere wurde Ende der 60er Jahre von Martin Richards als Werkzeug zum Bau von Betriebssystemen und Compilern implementiert. Ebenso wie B unterschied auch BCPL noch keine Datentypen. C machte sich in der Folge einen Namen als Sprache zur Entwicklung des UNIX-Betriebssystems. Über Jahre galt die Version von C, die mit UNIX, Version 5, ausgeliefert wurde, als de facto Standard. Sie wurde von ihrem Erfinder Ritchie und Brian Kernighan im Klassiker der C-Literatur "The C Programming Language" beschrieben (dt. Titel: "Programmieren in C").
Durch die massenhafte Verbreitung von Mikrocomputern entstanden zahlreiche verschiedene Implementierungen von C. Inzwischen ist die Programmiersprache auf praktisch allen Rechnerplattformen verfügbar. Ihre zunehmende Popularität verlangte allerdings bald nach einer Standardisierung, da Hersteller damit begannen, sie eigenmächtig zu erweitern.
Die sich ankündigende babylonische Sprachenverwirrung, wie sie von anderen Programmiersprachen her bekannt ist (v.a. BASIC, PROLOG, Lisp), drohte eine der Stärken von C zu beseitigen: Portabilität. Darunter versteht man die Tatsache, daß ein und derselbe Quelltext auf verschiedenen Plattformen mit verschiedenen Compilern ohne größere Änderungen übersetzt werden kann.
Im Jahre 1983 richtete das amerikanische ANSI-Institut ein Komitee (American National Standards Committee) zur Festlegung eines Sprachstandards für C ein. Dieser wurde schließlich 1989 verabschiedet.
Kernighan’s und Ritchie’s "The C Programming Language", seinerzeit verbindliche Beschreibung der ursprünglichen UNIX-Variante von C, berücksichtigt in seiner 2. Ausgabe im Jahre 1988 die Standardisierung durch ANSI und unterstreicht damit die allgemeine Anerkennung von ANSI-C.
Die meisten Implementierungen der verschiedenen Hersteller verfügen zwar nach wie vor über proprietäre Spracherweiterungen, alle gängigen Versionen von C unterstützen aber mittlerweile als kleinsten gemeinsamen Nenner den ANSI-Standard. Hält sich der Programmierer an die ANSI-Vorgaben (die bei den meisten Compilern als Option gewählt werden können), dann kommt dies der Portabilität des Programms zugute.
Deren größtes Hindernis sind heutzutage aber weniger die Inkonsistenzen der Programmiersprache, sondern vielmehr die unterschiedlichen Programmierschnittstellen (Application Program Interfaces - APIs) der Betriebssysteme. Konnten Textmodus-Anwendung unter DOS oder UNIX noch weitgehend mit den Standardbibliotheken von C ihr Auslangen finden, so müssen moderne grafische Benutzeroberflächen (grafical user interface - GUI) für viele Aufgaben auf API-Funktionen zurückgreifen. Diese Routinen sind systemspezifisch und erschweren z.B. die Übertragung von Windows-Programmen auf Unix.