Varianten der Programmiersprache C

Varianten der Programmiersprache C

Seit dem Erscheinen der Programmiersprache C im Jahre 1972 wurden mehrere Varianten (Spezifikationen und internationale Standards) veröffentlicht.

Inhaltsverzeichnis

K&R-C

Mit K&R-C wird die C-Variante bezeichnet, wie sie ursprünglich von den Erfindern Brian W. Kernighan und Dennis Ritchie verfasst wurde und in der ersten Auflage ihres Buches The C Programming Language von 1978 (K&R1) beschrieben ist.

C89, C90

Im Jahre 1983 wurde vom American National Standards Institute (ANSI) ein Komitee namens X3J11 gegründet, um eine Norm für die Programmiersprache C zu entwickeln. Als Grundlage für die Sprachdefinition diente die Programmiersprache C, wie sie von den Erfindern Brian W. Kernighan und Dennis Ritchie (K&R-C) konzipiert wurde.

Nach sechsjähriger Arbeit konnte im Dezember 1989 die Norm ANSI X3.159-1989 Programming Language C verabschiedet werden. Diese Fassung der Sprache C wird aufgrund ihres Erscheinungsjahres auch als C89 bezeichnet. Ein Jahr später, 1990, wurde diese Norm (mit ein paar kleineren Änderungen) von der WG14 der ISO als Norm ISO/IEC 9899:1990 (C90), übernommen. Die überarbeitete zweite Auflage des Buches The C Programming Language von 1988 (K&R2) reflektiert die Änderungen an der Sprache durch den Standardisierungsprozess.

Viele der bis dato ungenormten Eigenschaften der Sprache wurden einheitlich festlegt, aber auch neue Sprachmittel wie Funktionsprototypen, ein leistungsfähigerer C-Präprozessor, sowie die Möglichkeit zur Deklaration von Konstanten, wurden in die Sprache aufgenommen. Die C-Norm räumte dabei unter anderem mit Unklarheiten in der ursprünglichen Definition auf, hierzu zählen die Ausführungsreihenfolge der vier Inkrement- und Dekrement-Operatoren (++, --). Mit der Norm wurde ferner der Umfang der enthaltenen Standardbibliothek festgelegt.

Bis heute ist C90 die Sprachbasis für alle Weiterentwicklungen der Programmiersprache C, unter anderem auch für C++, das über Möglichkeiten zur objektorientierten und generischen Programmierung verfügt.

Ein auf C90 basierendes Programm sollte ohne Probleme von jedem C-Compiler übersetzt und ausgeführt werden können. In der Praxis ist das nur bedingt der Fall, da fast alle C-Derivate zusätzliche Bibliotheken und Funktionsprototypen benutzen, um auf die individuellen Komponenten des Computersystems zugreifen zu können.

Wichtigste Neuerungen von C90

  • Der Funktionsumfang sowie das Verhalten der Funktionen der C-Bibliothek wurden normiert.
  • Ein verbesserter Präprozessor wurde eingeführt.
  • Funktionsprototypen wurden eingeführt.
  • Die neuen Schlüsselwörter const, volatile und signed wurden eingeführt.
  • Das ungenutzte Schlüsselwort entry wurde entfernt.
  • Unterstützung für wide character- (mehr als 8 Bit Breite) sowie für Multibyte-Zeichensätze wurde hinzugefügt.

Präprozessortest auf C90-Kompatibilität

#if __STDC__
/*
 * C90-kompatibler Quellcode.
 */
#endif

C95

1995 veröffentlichte die ISO eine Erweiterung – das Amendment 1 – zur C-Norm, die dann als ISO/IEC 9899:1994-09 (C95) bezeichnet wurde. Neben Fehlerkorrekturen gab es auch Änderungen am Sprachumfang.[1]

Wichtigste Neuerungen von C95

  • Verbesserung der Unterstützung von Multibyte- und wide character-Zeichensätzen durch die Standardbibliothek.
  • Hinzufügen von Digraphen zur Sprache.
  • Definition von Standard-Makros zur alternativen Schreibweise von Operatoren, zum Beispiel and für &&.
  • Definition des Standard-Makros __STDC_VERSION__.

Präprozessortest auf C95-Kompatibilität

#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199409L
/*
 * C95-kompatibler Quellcode.
 */
#endif

C99

1995 wurde erneut ein Ausschuss gegründet, um C zu erweitern und zu verbessern. Daraus ging 1999 der neue ISO-Standard ISO/IEC 9899:1999 hervor, auch als C99 bezeichnet. Er löste den Standard ISO/IEC 9899:1994-09 (C95) ab. Zu diesem Standard erschienen 2001 ein Technical Corrigendum 1[2], 2004 ein Technical Corrigendum 2[3] und 2007 ein Technical Corrigendum 3[4]. C99 inklusive dieser Korrekturen wird informell auch als C0X bezeichnet und bildet die Basis für kommende C-Standards.[5]

Mit C99 flossen einige aus C++ bekannte Erweiterungen in die Sprache C ein, zum Beispiel das Schlüsselwort inline und die Möglichkeit, Variablen innerhalb der for-Anweisung zu deklarieren.

Wichtigste Neuerungen von C99

  • Unterstützung von komplexen Zahlen durch den neuen Datentyp _Complex und entsprechende Funktionen in der Standardbibliothek.
  • Erweiterung der ganzzahligen Datentypen um einen mindestens 64 Bit breiten Typ long long, sowie um Typen mit vorgegebener Mindestbreite, zum Beispiel int_least8_t und uint_least32_t. Außerdem werden Integer mit exakter Breite spezifiziert, aber als optional bezeichnet – zum Beispiel int32_t.
  • Lokale Felder variabler Größe.
  • Der boolesche Datentyp _Bool. Über einen eigenen Header <stdbool.h> wird für ihn ein Makro namens bool definiert.
  • Weiter verbesserte Unterstützung für internationale Zeichensätze.
  • Erweiterte Unterstützung von Gleitkommazahlen inklusive neuer mathematischer Funktionen in der C-Bibliothek.
  • Alias-freie Zeiger (Schlüsselwort restrict).
  • Frei platzierbare Deklaration von Bezeichnern (in C90 durften diese nur am Anfang eines Blocks stehen).
  • Inline-Funktionen (Schlüsselwort inline).
  • Verbot des „impliziten int“; Verbot impliziter Funktionsdeklarationen.
  • Hexadezimale Gleitkommakonstanten. Ein- und Ausgabe in scanf() und printf() über „%a“ und „%A“.
  • Präprozessor-Makros mit variabler Parameteranzahl.
  • Zulassen des aus C++ bekannten Zeilenkommentars „//“.

Präprozessortest auf C99-Kompatibilität

#if defined(__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
 // C99 kompatibler Quellcode.
#endif

C1X

Das Normierungskommitee WG14 arbeitet zurzeit (Stand: September 2010) an einer Neuauflage des C-Standards mit Arbeitstitel C1X, basierend auf dem aktuell gültigen C99-Standard inklusive der Technical Corrigenda TC1, TC2 und TC3 (C0X).

Geplante Neuerungen von C1X

Die Auflistung basiert auf diversen Technical Reports[6] und dem aktuellen Arbeitsdokument zu C1X.[7]

  • Unterstützung von Multithreading (<threads.h>, <stdatomic.h>)
  • Angaben zur Speicherausrichtung von Objekten (<stdalign.h>)
  • Neue Datentypen char16_t und char32_t zur verbesserten Unterstützung von Unicode, insbesondere UTF-16 und UTF-32
  • Änderungen an der Standardbibliothek zur Prüfung von Feldgrenzen zur Laufzeit des Programms, um z. B. Pufferüberläufe wirksamer vermeiden zu können[8]
  • Dynamische Speicherallokation in neuen Bibliotheksfunktionen, zum Beispiel strdup und asprintf[9]
  • Unterstützung der internen dezimalen Darstellung von Gleitkommazahlen gemäß IEEE 754-2008
  • Entfernung der Bibliotheksfunktion gets

Beispiele für den Unterschied zwischen verschiedenen Fassungen der Sprache C

K&R-C:

/* Es gibt noch keine Funktionsprototypen. */
Ausgabe( str )
char *str;
{
    printf( "%s\n", str );
}
 
main()
{
    Ausgabe( "Hallo Welt!" );
    return 0;
}

C90/C95:

#include <stdio.h>
 
/* Das Argument darf nicht geändert werden. */
void Ausgabe( const char * const str )
{
    printf( "%s\n", str );
}
 
main()
{
    Ausgabe( "Hallo Welt!" );
    return 0;
}

C99:

#include <stdio.h>
 
// Das Argument ist konstant und es gibt keinen Alias.
void Ausgabe( const char * const restrict str )
{
    printf( "%s\n", str );
}
 
int main( void ) // der Rückgabetyp muss angegeben werden
{
    Ausgabe( "Hallo Welt!" );
    // "return 0;" muss nicht mehr angegeben werden.
}

Einzelnachweise

  1. Clive D.W. Feather: A brief description of Normative Addendum 1. Abgerufen am 12. September 2010 (englisch).
  2. C99 Technical Corrigendum 1. Abgerufen am 22. September 2010 (PDF, englisch).
  3. C99 Technical Corrigendum 2. Abgerufen am 22. September 2010 (PDF, englisch).
  4. C99 Technical Corrigendum 3. Abgerufen am 22. September 2010 (PDF, englisch).
  5. John Benito: Offizielle Charta für den C1X Standardisierungsprozess. Abgerufen am 12. September 2010 (PDF, englisch).
  6. Projektstatus für C1X. Abgerufen am 12. September 2010 (englisch).
  7. ISO/IEC 9899:201x. Abgerufen am 11. April 2011 (PDF, englisch, nicht-normatives Arbeitsdokument).
  8. Extensions to the C Library, Part I: Bounds-checking interfaces. Abgerufen am 31. Oktober 2010 (PDF, englisch, Entwurf).
  9. Extensions to the C Library, Part II: Dynamic Allocation Functions. Abgerufen am 31. Oktober 2010 (PDF, englisch, Entwurf).

Weblinks


Wikimedia Foundation.

Игры ⚽ Нужна курсовая?

Schlagen Sie auch in anderen Wörterbüchern nach:

  • Programmiersprache C — C Paradigmen: imperativ, strukturiert Erscheinungsjahr: 1972 Entwickler: Dennis Ritchie Bell Labs wichtige Implementierungen …   Deutsch Wikipedia

  • Programmiersprache — Quelltext eines Programms in der Programmiersprache C++. Eine Programmiersprache ist eine formale Sprache, die zur Formulierung von Computerprogrammen verwendet wird. Die Anweisungen (Befehle) können dabei entweder in Maschinencode geschrieben… …   Deutsch Wikipedia

  • Programmiersprache Haskell — Haskell Basisdaten Paradigmen: funktional, nicht strikt, modular …   Deutsch Wikipedia

  • C Programmiersprache — C Paradigmen: imperativ, strukturiert Erscheinungsjahr: 1972 Entwickler: Dennis Ritchie Bell Labs wichtige Implementierungen …   Deutsch Wikipedia

  • C (Programmiersprache) — C Paradigmen: imperativ, strukturiert Erscheinungsjahr: 1972 Entwickler: Dennis Ritchie Bell Labs wichtige Implementierungen …   Deutsch Wikipedia

  • Programmiersprache Smalltalk — Smalltalk Logo von Smalltalk Basisdaten Entwickler: diverse Aktuelle Version: Smalltalk 80  (1980) …   Deutsch Wikipedia

  • Liste der BASIC-Dialekte — Aufgrund der seit Jahrzehnten bestehenden Popularität der Computer Programmiersprache BASIC existieren zahlreiche BASIC Implementierungen auf einer Vielzahl von Plattformen. Entsprechend den sehr unterschiedlichen Umgebungen und Einsatzzwecken… …   Deutsch Wikipedia

  • Geschichte der Programmiersprachen — Die Geschichte der Programmiersprachen beginnt bereits im 19. Jahrhundert und ist in ihren Anfängen stark durch die Mathematik und durch Ingenieurswissenschaften geprägt. Ab wann eine Programmiersprache vorliegt, ist tatsächlich nicht eindeutig… …   Deutsch Wikipedia

  • Haskell (Programmiersprache) — Haskell Basisdaten Paradigmen: funktional, nicht strikt, modular, deklarativ Erscheinungsjahr …   Deutsch Wikipedia

  • Shakespeare (Programmiersprache) — Die Shakespeare Programming Language (SPL) ist eine von Kalle Hasselström und Jon Åslund im Jahre 2001 entwickelte imperative esoterische Programmiersprache (Computersprache), welche in C realisiert wurde und zu den interessantesten, aber auch am …   Deutsch Wikipedia

Share the article and excerpts

Direct link
Do a right-click on the link above
and select “Copy Link”