Zum Inhalt springen

C (Programmiersprache)

aus Wikipedia, der freien Enzyklopädie
Dies ist eine alte Version dieser Seite, zuletzt bearbeitet am 6. Juli 2007 um 08:28 Uhr durch Semper (Diskussion | Beiträge) (rev. Linkspam, unkommentierte Trivial-Programmschipselchen). Sie kann sich erheblich von der aktuellen Version unterscheiden.

C ist eine imperative Programmiersprache, welche Dennis Ritchie in den frühen 1970er Jahren an den Bell Laboratories für das Betriebssystem Unix entwickelte. Seitdem ist es auf vielen Computer-Systemen verbreitet. Die Anwendungsbereiche von C sind universell. Es wird zur System- und Anwendungsprogrammierung eingesetzt. Die grundlegenden Programme aller Unix-Systeme und die Systemkerne vieler Betriebssysteme sind in C programmiert. Zahlreiche Sprachen, wie C++, Java, C#, Objective-C, PHP oder Perl orientieren sich an der Syntax und anderen Eigenschaften von C.

Überblick

C ist eine Programmiersprache, die auf fast allen Computersystemen zur Verfügung steht. Sie zählt zu den sogenannten prozeduralen Programmiersprachen. Seit der Definition von ISO-C gibt es relativ einheitliche Implementierungen auf den verschiedenen Computer-Plattformen. In jedem C-System mit Laufzeitumgebung steht auch die genormte Standard C Library zur Verfügung. Konzeptionell ist C auf einfache Kompilierbarkeit ausgelegt. In C geschriebene Programme werden im allgemeinen recht schnell ausgeführt. Die Compiler erzeugen in der Regel aber auch nur wenig Code zur Gewährleistung der Sicherheit zur Laufzeit der Programme.

Die Verbreitung von C ist nach wie vor hoch. Viele ursprünglich in C geschriebene Programme müssen gewartet und weiterentwickelt werden. Programmierschnittstellen für Anwendungsprogramme werden häufig in Form von C-Schnittstellen dargeboten.

Dank einiger Eigenschaften wie dem relativ direkten Speicherzugriff eignet es sich gut für die Systemprogrammierung. Bei der Anwendungsentwicklung wird C jedoch zunehmend durch andere Sprachen, wie C++, Objective-C, Java oder C# verdrängt, die C im Bezug auf Entwicklungsgeschwindigkeit, Wartbarkeit, Informationssicherheit, Entwurfsunterstützung und Abstraktionsniveau erweitern und verbessern.

Die Programmiersprache C wurde mit dem Ziel entwickelt, eine echte Sprachabstraktion zur Assemblersprache zu implementieren. Es sollte eine direkte Zuordnung zu wenigen Maschineninstruktionen geben, um die Abhängigkeit von einer Laufzeitumgebung zu minimieren. Als Resultat dieses Designs ist es möglich, C-Code auf einer sehr hardwarenahen Ebene zu schreiben, analog zu Assemblerbefehlen. Die Portierung eines C-Compilers auf eine neue Prozessorplattform ist, verglichen mit anderen Sprachen, weniger aufwändig, so dass sich dies vom einfachsten Mikrocontroller bis zum Großrechner-Prozessor praktisch immer lohnt. Der GNU-C-Compiler (gcc) ist beispielsweise für eine Vielzahl unterschiedlicher Prozessoren und Betriebssysteme verfügbar. Für den Entwickler bedeutet dies, dass unabhängig von der Zielplattform fast immer auch ein C-Compiler für diese spezifische Plattform existiert. Die prozessorspezifische Programmierung in Assembler bleibt ihm dadurch ganz oder weitgehend erspart, und Quellcode, der für andere Plattformen geschrieben wurde, kann oftmals mit keinen oder nur wenigen Änderungen auf einer neuen Plattform weiterverwendet werden. Bei Microcontrollern ist C die mit Abstand am häufigsten verwendete Hochsprache.

Geschichte

Die Entwicklung von C ist von der Programmiersprache B beeinflusst, welche Ken Thompson entwickelt hat.

Die Sprachbeschreibung wurde 1972 erstmals publiziert. Im Jahre 1989 wurde die Sprache erstmals standardisiert (C89). Dieser Standard wurde überarbeitet, und 1999 erschien dann der internationale Standard ISO/IEC 9899:1999, der als C99 bekannt ist.

Hauptartikel: Varianten der Programmiersprache C

Sprachdesign

Ein C-Programm wird durch den sogenannten Linker oder Binder aus Objektcode zum ausführbaren Computerprogramm gebunden. Dabei können mehrere Objektcodedateien zu einem Programm zusammengefasst werden. Die Objektcodedateien ihrerseits werden durch den Compiler aus Textdateien erzeugt (übersetzt), die eine Anzahl Funktions- und Variablendefinitionen enthalten. Neben Programmen kann man aber auch noch Bibliotheken erstellen. Diese werden ähnlich wie Programme gebunden oder zu einem Archiv zusammengefasst. Diese Bibliotheken können dann in einem späteren Bindevorgang wiederum zu einem Programm hinzugebunden werden. Auf diese Weise kann man verhindern, dass für jedes zu erzeugende Programm unzählige (in größeren Systemen durchaus hunderte bis tausende) unveränderliche Objektcodedateien immer wieder erneut gebunden werden müssen.

Das Design der Programmiersprache, die Technik des Linkens und verschiedene zu festen Sprachelementen gewordene Funktionen und Festlegungen sind eng mit dem Design Unix-artiger Betriebssysteme verbunden, so die Art und Weise der Signalbearbeitung, die Ein- und Ausgabe mit Streams und das Verfahren des Startens und Beendens eines Programms.

Hallo-Welt-Programm in C

Der folgende Quelltext für ein Hallo-Welt-Programm stellt ein einfaches C-Programm dar, das die Meldung Hallo Welt!, gefolgt von einem Zeilenumbruch ausgibt.

#include <stdio.h>

int main(void)
{
    printf("Hallo Welt!\n");
    return 0;
}

Erläuterung: In der ersten Zeile wird durch #include <stdio.h> die Verwendung der Ein-/Ausgabe-Bibliothek stdio und damit der Funktion printf ermöglicht. stdio.h ist eine sogenannte Headerdatei. Sie enthält u. a. eine Deklaration von printf und wird durch den Präprozessor eingefügt.

In der zweiten Zeile beginnt das eigentliche Programm mit der Definition der Funktion main. Sie ist die Einstiegsfunktion eines C-Programmes. main wird automatisch als erste Funktion aufgerufen. Anfang und Ende der Funktion main werden durch die beiden geschweiften Klammern markiert.

Die erste Anweisung innerhalb der Funktion main ruft die Funktion printf auf. Die zweite Anweisung ist die Sprunganweisung return 0; Diese legt den Rückgabewert von main fest. Damit wird der „Erfolgsstatus“ des ausgeführten Programms zum Ausdruck gebracht. Der Wert 0 bedeutet fehlerfreie Ausführung. Alle anderen Werte als 0 bedeuten einen Fehlerstatus.

Programmieren in C

Die Programmierung mit der Sprache C kann nach vier Kriterien unterteilt werden:

  • Der erste Betrachtungspunkt ist die Sprache selbst. Also der Kern der Sprache, der vom Compiler direkt verstanden wird.
  • Die Bibliotheksfunktionen, die jedem Programmierer zur Verfügung stehen, sofern das installierte C-Entwicklungssystem den Anspruch hat, ISO-kompatibel zu sein. Verwendet ein Programm lediglich den Sprachkern gemäß der Sprachdefinition und die Standardbibliothek, so ist es auf jedem System, das einen ISO-kompatiblen Compiler zur Verfügung stellt, übersetzbar. Es zeigt aber nur dann auf allen Systemen das gleiche Verhalten, wenn der Programmierer das Programm portabel geschrieben hat, denn nicht jeder Ausdruck der Sprache hat eine wohldefinierte und überall einheitliche Bedeutung.
  • Die Bibliotheksfunktionen, die von dem (Betriebs-)System zur Verfügung gestellt werden. Diese Bibliotheken stammen also nicht von einem ISO-kompatiblen C-Entwicklungssystem. Daher sind Programme, die diese Bibliotheken verwenden, nur bedingt portabel.
  • Die Erweiterungen des Sprachkerns, die von einem Compiler zur Verfügung gestellt werden. Diese Erweiterungen betreffen die Werkzeuge.

Die Standardbibliothek

Die C-Standardbibliothek beschreibt die Makros und Funktionen, die jedem Compiler zur Verfügung steht.

Literatur

Wikibooks: C-Programmierung – Lern- und Lehrmaterialien