1.2 Der ANSI-C-Standard 

C wurde 1972 von Dennis Ritchie und Ken Thompson erfunden, wobei »erfunden« nicht ganz der richtige Ausdruck ist. C wurde aufgrund einiger Einschränkungen der Vorgängersprache B implementiert und hauptsächlich für das Betriebssystem UNIX entwickelt. Denn vorher war UNIX vollständig in Assembler programmiert.
Als die ersten frei erhältlichen Compiler für C erschienen, war der Siegeszug nicht mehr aufzuhalten. C wurde im Zusammenhang mit UNIX zur erfolgreichsten Sprache überhaupt.
C wurde aber nicht entwickelt, um Software zu schreiben, sondern für Programmierer, die Compiler entwickelten. Und genau da lag das Problem. Jeder Compiler-Hersteller kochte sein eigenes Süppchen und erweiterte die Programmiersprache um einige Funktionen oder ließ die eine oder andere bestehende Funktion wegfallen.
Mit der Zeit entstanden immer mehr unterschiedliche C-Dialekte, und eine Portierung von einem zum anderen System kam dem Neuschreiben eines Programms gleich.
Schließlich fand sich eine Gruppe von Compiler-, Hardware- und Software-Entwicklern zusammen, mit der Absicht, das Problem der Vielfalt der Sprachendialekte zu beheben. Das American National Standard Institute (kurz ANSI) rief 1983 ein Komitee namens X3J11 ins Leben, das die Aufgabe bekam, die Sprache C zu standardisieren.
ANSI-Standards |
Das ANSI hat natürlich nicht nur den C-Standard geschaffen, sondern ist auch für unzählige weitere Standards weltweit verantwortlich (siehe http://www.ansi.org/). |
Das Komitee entwickelte einen Entwurf für einen gemeinsamen Standard und dessen Einhaltung. 1989 war es dann endlich so weit: Der Entwurf wurde vorgelegt und auch von der International Standards Organization (ISO) übernommen. In der Kurzform hieß er C89-Standard (ANSI-Standard X3.159–1989). Teil des ANSI-C-Standards sind die Software-Bibliotheken (besser bekannt unter dem Begriff ANSI C standard library).
Bei einer späteren Revision des C-Standards wurden neue Headerdateien zur Bibliothek hinzugefügt. 1995 kamen beispielsweise die Headerdateien <iso646.h>, <wchar.h> und <wctype.h> hinzu, die als Normative Amendment 1 bezeichnet wurden (kurz NA1).
Vier Jahre später, 1999, kamen dann die Headerdateien <complex.h>, <fenv.h>, <inttypes.h>, <stdbool.h>, <stdint.h> und <tgmath.h> hinzu. Diese Revision wurde dann als C99-Standard bekannt.
Natürlich wurden nicht immer nur Headerdateien hinzugefügt, sondern auch die wesentlichen Schwächen von C verbessert. Dies muss an dieser Stelle erwähnt werden, da häufig auf Titeln von Büchern zu lesen ist: »Entspricht dem neuen C99-Standard«. Häufig bezieht sich diese Aussage auf die wesentlichen Verbesserungen von C und nicht auf die neuen Bibliotheken.
Der aktuelle C99-Standard (ISO/IEC 9899:1999) ist mittlerweile bei vielen Compilerherstellern angekommen und größtenteils implementiert.
Sofern Sie den Standard lesen wollen, müssen Sie diesen käuflich erwerben, da es keine Online-Version davon gibt. Der ISO-Standard wird in Genf unter folgender Adresse vertrieben:
ISO Distribution Case Postale 56 CH-1211 Geneve 20 Suisse
Sie können allerdings auch eine Rationale via FTP von ftp.uu.net beziehen. Im Verzeichnis doc/standards/ansi/X3.159–1989 finden Sie eine entsprechende Postscript-Datei, die auch von Silicon Press (ISBN 0–929306–07–4) vertrieben wird.
Rationale |
Eine Rationale ist eine Erklärung, warum das Standardisierungskomitee eine Entscheidung so und nicht anders getroffen hat. Allerdings ist diese Rationale nicht Bestandteil des ANSI-Standards, weshalb sie auch nicht im oben genannten ISO-Standard vorhanden ist. Die Rationale dient lediglich zur Information. |
Seit 2007 arbeitet das Standardisierungskomitee an einer neuen Revision des C–Standards. Derzeit wird dieser Standard als C1x bezeichnet. Daraus kann man zumindest schließen, dass dieser Standard irgendwann im Jahre 2010 bis 2019 erscheinen dürfte. Fakt ist auf jeden Fall, dass dann auch die Thread-Programmierung im Standard implementiert sein wird, was gerade angesichts der Mehrprozessorsysteme unumgänglich wird. Es dürfte wohl auch zu erwarten sein, dass der neue C1x-Standard neue Funktionen für eingebettete Systeme, verschiedene Zeichensätze (Unicode-Unterstützung), Funktionen für eine dynamische Speicherreservierung und Überprüfung von Speicher- bzw. Pufferüberläufen usw. enthalten wird.
1.2.1 Welcher C-Standard wird in diesem Buch verwendet? 

Den einen oder anderen dürfte diese Überschrift etwas verwirren, da sich das Buch doch als C99-Standard-konform gibt. Das ist schon richtig, das Buch hier beschreibt auch den C99-Standard. Nur leider schaffen es einige Compiler-Hersteller nicht (darunter auch solche Größen wie Microsoft oder Borland; Stand 2009) den C99-Standard komplett zu implementieren. So bleibt mir in diesem Buch nichts anders übrig, als immer wieder darauf hinzuweisen, dass dies oder jenes eben dem C99-Standard entspricht und somit auch nur bei Compilern funktioniert, die diesen Standard implementiert haben. Besonders hervorzuheben bezüglich der Unterstützung des C99-Standards sind hier die Compiler GCC, Sun Studio (Software), Open Watcom C Compiler und Intel C/C++.
Hinweis |
Die Syntaxbeschreibungen bei den Funktionen der Standard-C-Bibliothek finden Sie im C99-Standard. Im Grunde besteht hierbei eigentlich kein Unterschied, nur dass im C99-Standard einige Funktionen mit dem restrict-Zeiger deklariert sind. Mehr hierzu finden Sie im entsprechenden Abschnitt 12.13. |
1.2.2 Der Vorteil des ANSI-C-Standards 

Der Hauptvorteil des ANSI-C-Standards ist die Portabilität von C-Programmen. Das bedeutet: Wenn Sie ein Programm auf Plattform A geschrieben haben und übersetzen, lässt sich dieses Programm auch auf Plattform B übersetzen. Natürlich ist damit eine Neuübersetzung des Quellcodes gemeint und nicht das ausführbare Programm. ANSI-C-Compiler gibt es für über 40 Systeme, vom kleinsten 8-Bit-Computer bis hin zum Superrechner.
Nicht portabel hingegen sind hardwarenahe bzw. betriebssystemspezifische Operationen. Wenn Sie zum Beispiel ein Programm für UNIX/Linux schreiben, das die Grafikkarte anspricht, wird das Programm seine Ausführung auf anderen Systemen verweigern.
Es gibt natürlich noch eine Reihe von weiteren Standards, die aber in diesem Buch nicht behandelt werden.
Ihre Meinung
Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.