C (Programmiersprache)
Die Programmiersprache C wurde von Ken Thompson und Dennis Ritchie in den frühen 1970er Jahren für das neu entwickelte Betriebssystem Unix entworfen. Ken Thompson passte zunächst die Programmiersprache BCPL auf seine Bedürfnisse an und nannte die so entstandene Sprache "B" (nach den "Bell Labs" in denen die Sprache entwickelt wurde). Aus dieser Sprache entstand dann C. Die grundlegenden Programme aller Unix-Systeme und die Kerne vieler Betriebssysteme sind in C programmiert.Die heute populären Sprachen C++ und indirekt auch Java und C# sind aus C hervorgegangen und gegenüber C unter anderem um Möglichkeiten zur objektorienterten und generischen Programmierung erweitert.
Überblick
C ist eine Programmiersprache, die auf fast allen Computersystemen zur Verfügung steht. Im Gegensatz zu z.B. BASIC gibt es seit der Definition von ANSI C relativ einheitliche Implementierungen auf den verschiedenen Plattformenen. In jedem C-System steht auch die genormte Standard C Library zur Verfügung. Dies und die sehr gute Performance der resultierenden Programme erklärt die weiterhin relativ hohe Popularität der Sprache, sowohl im kommerziellen als auch im Open-Source-Bereich.
Es gibt Meinungen, dass C softwaretechnologisch gesehen nicht dem heutigen Stand der Technik entspreche, oft wird C auch als portierbarer Highlevel-Assembler bezeichnet. Dem lässt sich entgegen halten, dass die Kerne fast aller heute verbreiteten Betriebssysteme in C implementiert wurden (und dies obwohl C++ bereits seit Mitte der 1980er Jahre zur Verfügung steht, wenn auch in der jetzigen, ISO-genormten Form erst seit 1998). C eignet sich gut für die Systemprogrammierung.
Anders sieht die Sache jedoch bei der Anwendungsentwicklung aus. Dort wird C zunehmend durch die Sprachen C++, Java und C# verdrängt, die gemeinsam haben, dass sie alle über Möglichkeiten zur objektorientierten Programmierung verfügen und C im Bezug auf Wartbarkeit, Entwurfsunterstützung und Abstraktionsniveau erweitern und verbessern.
An anderer Stelle zeigen sich die einfache Struktur und der kleine Umfang der Sprache als großer Vorteil: Die Portierung eines C-Compilers auf eine neue Prozessorplattform ist verglichen mit anderen Sprachen wenig aufwändig, so dass sich dies vom einfachsten Mikrocontroller bis zum Großrechner-Prozessor praktisch immer lohnt. Für den Entwickler bedeutet das, dass er, egal für welche Plattform er programmiert, immer davon ausgehen kann, einen C-Compiler zu bekommen. Die prozessor-spezifische Programmierung in Assembler bleibt ihm dadurch ganz oder weitgehend erspart, und er kann Quellcode, den er für andere Plattformen geschrieben hat, auf eine neue Plattform mitnehmen, und dieser wird (ganz ohne oder mit kleinen Änderungen) laufen.
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 , der als C99 bekannt ist. Siehe auch ANSI C.
Ein ausführbares C-Programm wird durch den so genannten Linker oder Binder aus Objektcode erzeugt (gebunden). Dabei können mehrere Objectcodedateien zu einem Programm zusammengefasst werden. Die Objektcodedateien ihrerseits werden durch den Compiler aus Textdateien erzeugt (übersetzt), die eine Anzahl Funktions- und Variablendefinitionen enthalten. Ein ausführbares Programm muss eine Funktion mit dem Namen main enthalten. Neben Programmen kann man aber auch noch Bibliotheken erstellen. Diese enthalten im Gegensatz zu Programmen (normalerweise) keine Funktion namens main, werden ähnlich wie Programme gebunden oder in ein 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 Programm das erzeugt wird, tausende unveränderliche Objektcodedateien immer wieder erneut gebunden werden müssen.
Der folgende Quelltext stellt ein einfaches C-Programm dar, das die Meldung
int main (void)
{
printf("Hallo Welt!\
In der dritten Zeile beginnt der Programmablauf. Es ist der Aufruf der Funktion
Die erste Anweisung in der Funktion
Dies geschieht durch die Präprozessordirektive
Die zweite Anweisung ist die Sprung-Anweisung
Die Programmierung mit der Sprache C kann nach vier Kriterien unterteilt werden:
Die Umgebung wird im Kapitel 5. Environment in C99 beschrieben.
Die Beschreibung der Sprache bezieht sich auf das Kapitel 6. Language in C99.
Die Standardbibliothek beschreibt die Makross und Funktionen, die jedem Compiler zur Verfügung steht.
Ihr ist der Artikel Standard C Library gewidmet.
Die nachfolgend beschriebenen Bibliotheken nicht Teil der Sprachbeschreibung von C.
Daher stehen sie nur zur Verfügung, wenn die API des Systems sie anbietet.
Hallo-Welt-Programm in C
Hallo Welt
und einen Zeilenumbruch auf dem Standardausgabemedium ausgibt.
#include
");
return 0;
}
main
. Die Funktion main
ist die Hauptfunktion eines Programmes (in einem hosted environment) und in unserem Programm ist sie sogar die einzige Funktion. Sie wird immer als erste Funktion aufgerufen. Sie hat wie alle Funktionen einen Anfang (die öffnende geschweifte Klammer) und ein Ende (die schließende geschweifte Klammer). Man kann ihr beim Aufruf Werte übergeben, die dann zwischen den runden Klammern angegeben werden. Wird void
zwischen den Klammern angegeben, dann hat das die Bedeutung, dass keine Werte übergeben werden. Nach der Abarbeitung erhält man von der Funktion main
einen Wert zurück. Dieser Wert ist vom Typ int
. Typ int
heißt, dass eine Ganzzahl zurückgeliefert wird.main
ist eine Ausdrucks-Anweisung welche die Funktion printf
aufruft. Diese Funktion ist nicht Teil des Sprachkerns, sondern der Standardbibliothek. Daher ist sie dem Compiler nicht bekannt und muss gemäß C99 vor ihrer Verwendung deklariert werden.#include
, die in der ersten Zeile angegeben wurde. Die Funktionen der Standardbibliothek werden in aller Regel durch eine Bibliothek mit Hilfe eines Linkers an das Programm gebunden, jedoch kann ein Compiler auch auf einem anderen Weg eine Funktion printf
zur Verfügung stellen.return 0;
. Die return
-Anweisung ist Teil des Sprachkerns. Für sie ist ein Header (#include...
), wie dies bei printf
der Fall war, nicht nötig. Der Rückgabewert 0
soll von dem Aufrufer des Programms als fehlerfreie Ausführung interpretiert werden.Programmieren in C
Umgebung
Beschreibung der Sprache
Die Standardbibliothek
Weitere C-Bibliotheken
Algorithmen
Werkzeuge
Bewertung von Sprachmerkmalen
Stärken
Schwächen
Man kann sagen, dass die größte Stärke von C - uneingeschränkte Freiheit des Progammierers mit Zeigern und Speicherstrukturen - gleichzeitig ihre größte Schwäche ist. Da der freizügige Umgang der Programmiersprache mit dem Speicher in kritischen Umgebungen (Banken, Börsen, Versicherungen, ...) leicht hohe Schäden nach sich ziehen kann, wird hier mittlerweile ernsthaft erwogen, diese Programmiersprache bei neuen Projekten zu verbieten.Siehe auch
Literatur
Weblinks