text: C ist eine imperative und prozedurale Programmiersprache, die der Informatiker Dennis Ritchie in den frühen 1970er Jahren an den Bell Laboratories entwickelte. Seitdem ist sie eine der am weitesten verbreiteten Programmiersprachen. Die Anwendungsbereiche von C sind sehr verschieden. Sie wird zur System- und Anwendungsprogrammierung eingesetzt. Die grundlegenden Programme aller Unix-Systeme und die Systemkernel vieler Betriebssysteme sind in C programmiert. Zahlreiche Sprachen, wie C++, Objective-C, C#, D, Java, JavaScript, LSL, PHP, Vala oder Perl, orientieren sich an der Syntax und anderen Eigenschaften von C. Geschichte Entstehung C wurde 1969–1973 von Dennis Ritchie in den Bell Laboratories für die Programmierung des damals neuen Unix-Betriebssystems entwickelt. Er stützte sich dabei auf die Programmiersprache B, die er mit Ken Thompson in den Jahren 1969/70 geschrieben hatten – der Name C entstand als Weiterentwicklung von B. B wiederum geht auf die von Martin Richards Mitte der 1960er-Jahre entwickelte Programmiersprache BCPL zurück. Ursprünglich war der Name NB („New B“) vorgesehen, daraus wurde schließlich C. Ritchie schrieb auch den ersten Compiler für C. 1973 war die Sprache so weit ausgereift, dass man nun den Unix-Kernel für die PDP-11 neu in C schreiben konnte. Weitere Entwicklung K&R C erweiterte die Sprache um neue Schlüsselwörter wie long oder unsigned und führte die von Mike Lesk entwickelte I/O-Standardbibliothek und auf Empfehlung von Alan Snyder den Präprozessor ein. Standards C ist eine Programmiersprache, die auf fast allen Computersystemen zur Verfügung steht. Um den Wildwuchs zahlreicher Dialekte einzudämmen, wurde C mehrfach standardisiert (C89/C90, C99, C11). Abgesehen vom Mikrocontrollerbereich, wo eigene Dialekte existieren, sind die meisten aktuellen PC-/Server-Implementierungen eng an den Standard angelehnt; eine vollständige Implementierung aktueller Standards ist aber selten. In den meisten C-Systemen mit Laufzeitumgebung steht auch die genormte C-Standard-Bibliothek zur Verfügung. Dadurch können C-Programme, die keine sehr hardwarenahe Programmierung enthalten, in der Regel gut auf andere Zielsysteme portiert werden. Das Normungsgremium von C ist die ISO/IEC – Arbeitsgruppe JTC1/SC22/WG14 – C, kurz als WG14 bekannt. Die nationalen Standardisierungsorganisationen übernehmen die Veröffentlichungen des internationalen Standards in an ihre Bedürfnisse angepasster Form. K&R C Bis ins Jahr 1989 gab es keinen offiziellen Standard der Sprache. Seit 1978 galt hingegen das Buch The C Programming Language als informeller De-facto-Standard, welches Brian W. Kernighan und Dennis Ritchie im selben Jahr veröffentlicht hatten. Bezeichnet wird diese Spezifikation als K&R C. Da in den folgenden Jahren die Zahl an Erweiterungen der Sprache ständig wuchs, man sich nicht auf eine gemeinsame Standard-Bibliothek einigen konnte und nicht einmal die UNIX-Compiler K&R C vollständig implementierten, wurde beschlossen, einen offiziellen Standard festzulegen. Nachdem dieser schließlich im Jahr 1989 erschienen war, blieb K&R C zwar noch für einige Jahre De-facto-Standard vieler Programmierer, verlor dann aber rasch an Bedeutung. ANSI C Im Jahr 1983 setzte das American National Standards Institute (ANSI) ein Komitee namens X3J11 ein, das 1989 seine Arbeit abschloss und die Norm ANSI X3.159-1989 Programming Language C verabschiedete. Diese Version der Sprache C wird auch kurz als ANSI C, Standard C oder C89 bezeichnet. Ein Jahr später übernahm die International Organization for Standardization (ISO) den bis dahin rein amerikanischen Standard auch als internationale Norm, die ISO/IEC 9899:1990, kurz auch als C90 bezeichnet. Die Namen C89 und C90 beziehen sich also auf dieselbe Version von C. Nach der ersten Entwicklung durch ANSI und ISO wurde der Sprachstandard für einige Jahre kaum geändert. Erst 1995 erschien das Normative Amendment 1 zu C90. Es hieß ISO/IEC 9899/AMD1:1995 und wird auch kurz als C95 bezeichnet. Neben der Korrektur einiger Details wurden mit C95 internationale Schriftsätze besser unterstützt. C99 Nach einigen kleineren Revisionen erschien im Jahr 1999 der neue Standard ISO/IEC 9899:1999, kurz C99. Er war größtenteils mit C90 kompatibel und führte einige neue, teilweise von C++ übernommene Features ein, von denen einige bereits zuvor von verschiedenen Compilern implementiert worden waren. C99 wurde im Lauf der Jahre durch drei Technical Corrigendas ergänzt. C11 Im Jahr 2007 begann die Entwicklung eines neuen Standards mit dem inoffiziellen Arbeitstitel C1X. Er wurde im Dezember 2011 veröffentlicht und ist in der Kurzform als C11 bekannt. Neben einer besseren Kompatibilität mit C++ wurden der Sprache wiederum neue Features hinzugefügt. C18 Diese Norm entspricht der von C11 mit der Ausnahme von Fehlerkorrekturen und einem neuen Wert von __STDC_VERSION__ und wird daher im selben Umfang wie C11 unterstützt. Der Standard wurde im Juni 2018 unter der Norm ISO/IEC 9899:2018 freigegeben. Verwendung Trotz des eher hohen Alters ist die Sprache C auch heute weit verbreitet und wird sowohl im Hochschulbereich als auch in der Industrie und im Open-Source-Bereich verwendet. System- und Anwendungsprogrammierung Das Haupteinsatzgebiet von C liegt in der Systemprogrammierung, insbesondere von eingebetteten Systemen, Treibern und Betriebssystemkernen. Der Grund liegt in der Kombination von erwünschten Charakteristiken wie Portabilität und Effizienz mit der Möglichkeit, Hardware direkt anzusprechen und dabei niedrige Anforderungen an eine Laufzeitumgebung zu haben. Auch Anwendungssoftware wird oft in C erstellt, wobei die Relevanz der Sprache hier hinter andere zurückfiel, das ist besonders deutlich auf mobilen Plattformen. Viele Programmierschnittstellen für Anwendungsprogramme und Betriebssystem-APIs werden in Form von C-Schnittstellen implementiert, zum Beispiel Win32. Implementierung anderer Sprachen Wegen der hohen Ausführungsgeschwindigkeit und geringen Codegröße werden Compiler, Programmbibliotheken und Interpreter anderer höherer Programmiersprachen (wie z. B. die Java Virtual Machine) oft in C implementiert. C wird als Zwischencode einiger Implementierungen höherer Programmiersprachen verwendet. Dabei wird diese zuerst in C-Code übersetzt, der dann kompiliert wird. Dieser Ansatz wird verwendet, um ohne maschinenspezifische Entwicklung für den Codegenerator die Portabilität zu erhöhen (C-Compiler existieren für nahezu jede Plattform). Einige Compiler, die C auf diese Art benutzen, sind Chicken, EiffelStudio, Esterel, PyPy, Sather, Squeak und Vala. C wurde allerdings als Programmiersprache und nicht als Zielsprache für Compiler entworfen. Als Zwischensprache ist es daher eher schlecht geeignet. Das führte zu C-basierten Zwischensprachen wie C−−. C wird oft für die Erstellung von Anbindungen (englisch bindings) genutzt (zum Beispiel Java Native Interface). Diese Anbindungen erlauben es Programmen, die in einer anderen Hochsprache geschrieben sind, Funktionen aufzurufen, die in C implementiert wurden. Der umgekehrte Weg ist oft ebenfalls möglich und kann verwendet werden, um in C geschriebene Programme mit einer anderen Sprache zu erweitern (z. B. mod perl). Syntax C ist case-sensitiv. Außerdem besitzt C eine sehr kleine Menge an Schlüsselwörtern. Die Anzahl der Schlüsselwörter ist so gering, weil fast alle Aufgaben, welche in anderen Sprachen über eigene Schlüsselwörter realisiert werden, über Funktionen der C-Standard-Bibliothek realisiert werden (zum Beispiel die Ein- und Ausgabe über Konsole oder Dateien, dynamische Speicherverwaltung usw.). In C89 gibt es 32 Schlüsselwörter: Mit C99 kamen fünf weitere dazu: Mit C11 kamen sieben weitere hinzu: Hallo-Welt-Programm Eine einfache Version des Hallo-Welt-Programms in C ist diejenige, die Ritchie und Kernighan selbst in der zweiten Auflage ihres Buches The C Programming Language verwendet haben. Zu beachten ist, dass im älteren ANSI C Standard kein Rückgabetyp angegeben werden muss, da der Compiler von einem impliziten int als Rückgabetyp ausgeht. #include <stdio.h> main() { printf("hello, world "); } Datentypen char Zum Speichern eines Zeichens (sowie von kleinen Zahlen) verwendet man in C üblicherweise den Datentyp Character, geschrieben als char. Vom Computer tatsächlich gespeichert wird nicht das Zeichen (wie zum Beispiel „A“), sondern eine gleichbedeutende mindestens acht Bit lange Binärzahl (z. B. 01000001). Diese Binärzahl steht im Speicher und kann anhand einer Tabelle jederzeit automatisch in den entsprechenden Buchstaben umgewandelt werden, wobei der aktuelle Zeichensatz bzw. die Codepage der Systemumgebung entscheidend ist. Zum Beispiel steht 01000001 gemäß der ASCII-Tabelle für das Zeichen „A“. Um auch Zeichen aus Zeichensätzen aufnehmen zu können, die mehr Zeichen umfassen als der relativ kleine ASCII-Zeichensatz, wurde mit wchar_t bald ein zweiter für Zeichen konzipierter Datentyp eingeführt. // gespeichert wird nicht das Zeichen „A“, sondern meist ein Byte ("01000001") char zeichen = 'A'; // gibt das Zeichen mit der Ordnungszahl 65 aus (in ASCII ein „A“) printf("%c", 65); int Zum Speichern einer Ganzzahl (wie zum Beispiel 3) verwendet man eine Variable vom Datentyp Integer, geschrieben als int. Die Größe eines Integers beträgt heutzutage (je nach Prozessorarchitektur und Betriebssystem) meist 32 Bit, oft aber auch schon 64 und manchmal noch 16 Bit. In 16 Bit lassen sich 65536 verschiedene Werte speichern. Um die Verwendung von negativen Zahlen zu ermöglichen, reicht der Wertebereich bei 16 Bit gewöhnlich von -32768 bis 32767. Werden keine negativen Zahlen benötigt, kann der Programmierer mit unsigned int aber einen vorzeichenlosen Integer verwenden. Bei 16 Bit großen Integern ergibt das einen Wertebereich von 0 bis 65535. Um den Wertebereich eines Integers zu verkleinern oder zu vergrößern, stellt man ihm einen der Qualifizierer short, long oder long long voran. Das Schlüsselwort int kann dann auch weggelassen werden, so ist long gleichbedeutend mit long int. Um zwischen vorzeichenbehafteten und vorzeichenlosen Ganzzahlen zu wechseln, gibt es die beiden Qualifizierer signed und unsigned. Für einen vorzeichenbehafteten Integer kann der Qualifizierer aber auch weggelassen werden, so ist signed int gleichbedeutend mit int. Die C-Standard-Bibliothek ergänzt diese Datentypen über die plattformunabhängige Header-Datei <stdint.h>, in der ein Set von Ganzzahltypen mit fester Länge definiert ist. Obwohl der Datentyp char für Textzeichen vorgesehen ist, können dessen Werte auch als ganze Zahlen mit einem Wertebereich von 0 bis 255 (unsigned) oder von -128 bis +127 (signed) verwendet werden. char ganzzahl = 1; // mindestens 8 Bit, also 256 mögliche Werte short ganzzahl = 2; // mindestens 16 Bit, also 65536 mögliche Werte int ganzzahl = 3; // mindestens 16 Bit, also 65536 mögliche Werte long ganzzahl = 4; // mindestens 32 Bit, also 4294967296 mögliche Werte long long ganzzahl = 5; // mindestens 64 Bit, also 18446744073709551616 mögliche Werte float und double Zahlen mit Nachkommastellen werden in einem der drei Datentypen float, double und long double gespeichert. In den meisten C-Implementierungen entsprechen die Datentypen float und double dem international gültigen Standard für binäre Gleitpunktarithmetiken (IEC 559, im Jahr 1989 aus dem älteren amerikanischen Standard IEEE 754 hervorgegangen). Ein float implementiert das „einfach lange Format“, ein double das „doppelt lange Format“. Dabei umfasst ein float 32 Bit, ein double 64 Bit. doubles sind also genauer. Floats werden aufgrund dieses Umstands nur noch in speziellen Fällen verwendet. Die Größe von long doubles ist je nach Implementierung unterschiedlich, ein long double darf aber auf keinen Fall kleiner sein als ein double. Die genauen Eigenschaften und Wertebereiche auf der benutzten Architektur können über die Headerdatei <float.h> ermittelt werden. // Genauigkeit ist jeweils implementierungsabhängig float kommazahl = 0.000001f; double kommazahl = 0.000000000000002; long double kommazahl = 0.3l; void Der Datentyp void wird im C-Standard als „unvollständiger Typ“ bezeichnet. Man kann keine Variablen von diesem Typ erzeugen. Verwendet wird void erstens, wenn eine Funktion keinen Wert zurückgeben soll, zweitens wenn explizit eine leere Parameterliste für eine Funktion verlangt wird und drittens, wenn ein Zeiger auf „Objekte beliebigen Typs“ zeigen soll. // Deklaration einer Funktion, die keinen Wert zurückgibt void funktionsname(); // Deklaration einer Funktion, die int zurückgibt und keine Parameter akzeptiert int funktionsname(void); // Zeiger auf ein Objekt von beliebigem Typ void* zeigername; Zeiger Wie in anderen Programmiersprachen sind Zeiger in C Variablen, die statt eines direkt verwendbaren Wertes (wie das Zeichen „A“ oder die Zahl 5) eine Speicheradresse (wie etwa die Adresse 170234) speichern. Die Adressen im Speicher sind durchnummeriert. An der Speicheradresse 170234 könnte zum Beispiel der Wert 00000001 gespeichert sein (Binärwert der Dezimalzahl 1). Zeiger ermöglichen es, auf den Wert zuzugreifen, der an einer Speicheradresse liegt. Dieser Wert kann wiederum eine Adresse sein, die auf eine weitere Speicheradresse zeigt. Bei der Deklaration eines Zeigers wird zuerst der Datentyp des Objekts angegeben, auf das gezeigt wird, danach ein Asterisk, danach der gewünschte Name des Zeigers. char* zeiger; // kann die Adresse eines Characters speichern double* zeiger; // kann die Adresse eines Doubles speichern Felder Wie in anderen Programmiersprachen verwendet man Arrays in C um mehrere Werte desselben Datentyps zu speichern. Die Werte eines Arrays haben aufeinanderfolgende Speicheradressen. Die Anzahl der verschiedenen Werte eines Arrays ist als Index des Feldes festgelegt. Da es in C keinen eigenen Datentyp für Strings gibt, werden Arrays auch verwendet, um Zeichenfolgen zu speichern. // Definition eines Arrays mit 3 ganzzahligen Werten int zahlen[] = { 17, 0, 3 }; // Array, das zur Speicherung eines Strings verwendet wird char string[] = "Hallo, Welt! "; struct Um verschiedenartige Daten in einer Variable zu speichern, verwendet man Structures, geschrieben als struct. Auf diese Weise können Variablen verschiedenen Datentyps zusammengefasst werden. struct person { char* vorname; char nachname[20]; int alter; double groesse; }; enum Wie in anderen Programmiersprachen dient ein Enum in C dazu, mehrere konstante Werte zu einem Typ zu kombinieren. enum Temperatur { WARM, KALT, MITTEL }; enum Temperatur heutige_temperatur = WARM; if (heutige_temperatur == KALT) printf("Warm anziehen!"); // wird nicht ausgegeben, da es heute „WARM“ ist typedef Das Schlüsselwort typedef wird zur Erstellung eines Alias für einen Datentyp verwendet. // legt den Alias "Ganzzahl" für den Datentyp "int" an typedef int Ganzzahl; // ist jetzt gleichbedeutend zu: int a, b; Ganzzahl a, b; _Bool Bis zum C99-Standard gab es keinen Datentyp zum Speichern eines Wahrheitswerts. Erst seit 1999 können Variablen als _Bool deklariert werden und einen der beiden Werte 0 (falsch) oder 1 (wahr) aufnehmen. _Bool a = 1; // seit C99 Durch explizite Verwendung des Headers stdbool.h ist die verbreitete Verwendung des logischen Datentyps bool mit den zwei möglichen Ausprägungen true bzw. false möglich: #include <stdbool.h> bool a = true; // seit C99 _Complex und _Imaginary Seit C99 gibt es drei Gleitkomma-Datentypen für komplexe Zahlen, welche aus den drei Gleitkommatypen abgeleitet sind: float _Complex, double _Complex und long double _Complex. Ebenfalls in C99 eingeführt wurden Gleitkomma-Datentypen für rein imaginäre Zahlen: float _Imaginary, double _Imaginary und long double _Imaginary. Funktionen Ein C-Programm besteht aus der main-Funktion und optional aus weiteren Funktionen. Weitere Funktionen können entweder selbst definiert werden oder vorgefertigt aus der C-Standard-Bibliothek übernommen werden. main Jedes C-Programm muss eine Funktion mit dem Namen main haben, anderenfalls wird das Programm nicht kompiliert. Die main-Funktion ist der Einsprungpunkt eines C-Programms, das heißt die Programmausführung beginnt immer mit dieser Funktion. // das kürzeste mögliche standardkonforme C89-Programm main(){return 0;} // das kürzeste mögliche standardkonforme C99-Programm int main(){} Außer der main-Funktion müssen in einem C-Programm keine weiteren Funktionen enthalten sein. Sollen andere Funktionen ausgeführt werden, müssen sie in der main-Funktion aufgerufen werden. Die main-Funktion wird deshalb auch als Hauptprogramm bezeichnet, alle weiteren Funktionen als Unterprogramme. Selbstdefinierte Funktionen In C lassen sich beliebig viele Funktionen selbst definieren. Eine Funktionsdefinition besteht erstens aus dem Datentyp des Rückgabewerts, zweitens dem Namen der Funktion, drittens einer eingeklammerten Liste von Parametern und viertens einem eingeklammerten Funktionsrumpf, in welchem ausprogrammiert wird, was die Funktion tun soll. // Datentyp des Rückgabewerts, Funktionsname und zwei Parameter int summe(int x, int y) { // Funktionsrumpf, hier wird die Summe berechnet und zurückgegeben return x + y; } int main() { // die Funktion wird mit den Werten 2 und 3 aufgerufen, der Rückgabewert // wird in der Variable „ergebnis“ gespeichert int ergebnis = summe(2, 3); // main gibt den Wert von „ergebnis“ zurück return ergebnis; } Für die Definition einer Funktion, die nichts zurückgeben soll, verwendet man das Schlüsselwort void. Ebenso falls der Funktion keine Parameter übergeben werden sollen. #include <stdio.h> void begruessung() { puts("Hi!"); return; } Funktionen der C-Standard-Bibliothek Die Funktionen der Standard-Bibliothek sind nicht Teil der Programmiersprache C. Sie werden bei jedem standardkonformen Compiler im hosted environment mitgeliefert und können verwendet werden, sobald man die jeweils entsprechende Header-Datei eingebunden hat. Beispielsweise dient die Funktion printf zur Ausgabe von Text. Sie kann verwendet werden, nachdem man die Header-Datei stdio.h eingebunden hat. #include <stdio.h> int main() { printf("hello world! "); return 0; } Anweisungen Eine Funktion besteht aus Anweisungen. Wie in den meisten Programmiersprachen sind die wichtigsten Anweisungen: Deklarationen und Definitionen, Zuweisungen, bedingte Anweisungen, Anweisungen die Schleifen umsetzen sowie Funktionsaufrufe. Im folgenden, eher sinnlosen Programm finden sich Beispiele. // Unterprogramme void funktion_die_nichts_tut() { // Definition return; // Return-Anweisung } int plus_eins_funktion(int argument) { // Definition return argument + 1; // Return-Anweisung } // Hauptprogramm int main() { // Definition int zahl; // Definition funktion_die_nichts_tut(); // Funktionsaufruf zahl = 5; // Zuweisung zahl = plus_eins_funktion(zahl); // Funktionsaufruf und Zuweisung if (zahl > 5) // bedingte Anweisung zahl -= 1; // Zuweisung: der Wert von „zahl“ ist wieder „5“ return 0; // Return-Anweisung } Namensgebung Beim Benennen von eigenen Variablen, Konstanten, Funktionen und Datentypen muss man sich an einige Regeln zur Namensgebung halten. Erstens muss das erste Zeichen eines Bezeichners ein Buchstabe oder Unterstrich sein. Zweitens dürfen die folgenden Zeichen nur die Buchstaben A bis Z und a bis z, Ziffern und der Unterstrich sein. Und drittens darf der Name keines der Schlüsselwörter sein. Seit C95 sind auch Zeichen aus dem Universal Coded Character Set in Bezeichnern erlaubt, sofern die Implementierung es unterstützt. Die erlaubten Zeichen sind in Anhang D des ISO-C-Standards aufgelistet. Vereinfacht gesagt, sind es all jene Zeichen, die in irgendeiner Sprache als Buchstabe oder buchstabenähnliches Zeichen Verwendung finden. Ab C99 lassen sich diese Zeichen plattformunabhängig über eine Escape-Sequenz wie folgt ersetzen: \uXXXX (wobei X für eine Hexadezimalziffer steht) für Zeichen mit einem Code von 00A0hex bis FFFFhex. \UXXXXXXXX für alle Zeichen mit einem Code ≥00A0hex. Bestimmte Bezeichner sind außerdem für die Implementierung reserviert: Bezeichner, die mit zwei aufeinanderfolgenden Unterstrichen beginnen Bezeichner, die mit Unterstrich gefolgt von einem Großbuchstaben anfangen. Erweiterungen am Sprachkern, die neue Schlüsselwörter erfordern, verwenden dafür ebenfalls Namen aus diesem reservierten Bereich, um zu vermeiden, dass sie mit Bezeichnern in existierenden C-Programmen kollidieren, z. B. _Complex, _Generic, _Thread_local. Standardbibliothek Die C-Standard-Bibliothek ist integraler Bestandteil einer gehosteten (engl. ) C-Implementierung. Sie enthält unter anderem Makros und Funktionen, die mittels der Standard-Header-Datei verfügbar gemacht werden. Auf freistehenden (englisch ) Implementationen dagegen kann der Umfang der Standardbibliothek eingeschränkt sein. Die Standardbibliothek ist aufgeteilt in mehrere Standard-Header-Dateien, die hinzugelinkte Bibliothek ist jedoch oft eine einzige große Datei. „Gehostet“: C-Compiler und Programm befinden sich in einer Betriebssystem-Umgebung, welche übliche Dienste bietet (z. B. ein Dateisystem, textuelle Ein- und Ausgabekanäle, Speichermanagement). „Freistehend“: Das C-Programm läuft nicht unter einem Betriebssystem, sondern muss alle Gerätefunktionen selbst implementieren. Häufig stehen dennoch zumindest einige Bibliotheken vorab zur Verfügung. Hier finden häufig Cross-Compiler (auch „Target-Compiler“) Verwendung. Module Eine Modularisierung in C erfolgt auf Dateiebene. Eine Datei bildet eine Übersetzungseinheit; intern benötigte Funktionen und Variablen können so vor anderen Dateien verborgen werden. Die Bekanntgabe der öffentlichen Funktionsschnittstellen erfolgt mit sogenannten Header-Dateien. Damit verfügt C über ein schwach ausgeprägtes Modulkonzept. Das globale Sprachdesign sieht vor, dass ein Programm aus mehreren Modulen bestehen kann. Für jedes Modul existiert eine Quellcode-Datei (mit der Endung .c) und eine Header-Datei (mit der Endung .h). Die Quellcode-Datei enthält im Wesentlichen die Implementierung, die Header-Datei das Interface nach außen. Beide Dateien konsistent zu halten, ist bei C (wie auch bei C++, aber nicht mehr in C#) Aufgabe des Programmierers. Module, die Funktionen aus anderen Modulen benutzen, inkludieren deren Header-Dateien und geben dem Compiler damit die notwendigen Informationen über die vorhandenen Funktionen, Aufrufkonventionen, Typen und Konstanten. Jedes Modul kann für sich übersetzt werden und erzeugt eine Object-Datei. Mehrere Object-Dateien können zu einer Bibliothek zusammengefasst oder einzeln verwendet werden. Mehrere Object-Dateien sowie Bibliotheken (die auch nur eine Sammlung von Objekt-Dateien sind) können mittels Linker (deutsch: Binder) zu einem ausführbaren Programm gebunden werden. Undefiniertes Verhalten Undefiniertes Verhalten (undefined behavior) ist nach der Definition des C-Standards „Verhalten bei Verwendung eines nicht portablen oder fehlerhaften Programmkonstrukts oder von fehlerhaften Daten, an die diese internationale Norm keine Anforderungen stellt“. Dies kann beispielsweise die Dereferenzierung eines Nullzeigers, die Division durch Null, der Zugriff auf Variablen durch Zeiger eines falschen Typs oder ein Überlauf bei vorzeichenbehafteten Ganzzahlen sein. Unter der Annahme, dass undefiniertes Verhalten in einem korrekten Programm nicht vorkommt, optimieren bestimmte Compiler solche Konstrukte in einer Weise, die das beobachtbare Verhalten verändern kann, etwa durch Entfernen von Code, der als nicht erreichbar eingestuft wird. Allgemein kann diese Art der Optimierung dazu führen, dass getestete Programme mit anderen Optimierungsstufen oder neueren Compilerversionen fehlerhaftes Verhalten zeigen. Dieses Compilerverhalten wird teilweise kontrovers diskutiert. Auch kann in der hardwarenahen Programmierung mit C die Verwendung von z. B. Überläufen oder uninitialisierten Variablen zur Laufzeitoptimierung des Codes genutzt werden. Geht der Compiler z. B. bei einer Schleife for (int i=n; i<n+10; i++) davon aus, dass kein Überlauf auftritt und sie daher höchstens zehnmal durchlaufen wird, kann dies ihn dazu veranlassen, eine vorherige Überprüfung auf Überlauf if (n < n + 10) als unnötigen Code entfernen. Solche Optimierungen können ihrerseits zu unerwünschtem Verhalten einschließlich registrierter Sicherheitslücken führen (siehe z. B.: CVE) führen. Compiler Am weitesten verbreitet ist der seit 1987 bestehende freie C-Compiler der GNU Compiler Collection. Unter Windows ist auch der seit 1993 entwickelte Compiler Visual C++ weit verbreitet. Neben diesen beiden stehen zahlreiche weitere Compiler zur Verfügung. Da es in C vergleichsweise wenige Schlüsselwörter gibt, ergibt sich der Vorteil eines sehr einfachen, kleinen Compilers. Auf neuen Computersystemen ist C deshalb oft die erste verfügbare Programmiersprache (nach Maschinencode und Assembler). Beziehung zu Assembler, Portierbarkeit 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, wenig aufwändig. Bspw. ist der freie GNU-C-Compiler (gcc) für eine Vielzahl unterschiedlicher Prozessoren und Betriebssysteme verfügbar. Für den Entwickler bedeutet das, dass unabhängig von der Zielplattform fast immer auch ein C-Compiler existiert. C unterstützt damit wesentlich die Portierbarkeit von Programmen, sofern der Programmierer auf Assemblerteile im Quelltext und/oder hardwarespezifische C-Konstrukte verzichten kann. In der Mikrocontroller-Programmierung ist C die mit Abstand am häufigsten verwendete Hochsprache. Sicherheit Konzeptionell ist C auf eine einfache Kompilierbarkeit der Quelltexte und für den schnellen Ablauf des Programmcodes ausgelegt. Die Compiler erzeugen in der Regel aber nur wenig Code zur Gewährleistung der Datensicherheit und Betriebssicherheit während der Laufzeit der Programme. Daher wird zunehmend versucht, diese Mängel durch formale Verifikation aufzudecken und zu korrigieren beziehungsweise durch zusätzliche vom Programmierer zu erstellende Quelltexte zu beheben. C schränkt direkte Speicherzugriffe kaum ein. Dadurch kann der Compiler (anders als zum Beispiel in Pascal) nur sehr eingeschränkt bei der Fehlersuche helfen. Aus diesem Grund ist C für sicherheitskritische Anwendungen (Medizintechnik, Verkehrsleittechnik, Raumfahrt) weniger geeignet. Wenn in diesen Bereichen dennoch C eingesetzt wird, so wird in der Regel versucht, die Qualität der erstellten Programme durch zusätzliche Prüfungen wie Softwaretests mit hoher Testabdeckung zu erhöhen. C enthält einige sicherheitskritische Funktionen; so überschreibt zum Beispiel gets(), in alten Standards eine Funktion der Standardbibliothek, fremde Speicherbereiche (Pufferüberlauf), wenn es auf eine unpassende (zu lange) Eingabe stößt. Der Fehler ist innerhalb von C weder bemerk- noch abfangbar. Um den großen Vorteil von C – die Existenz zahlreicher älterer Quellcodes – nicht zu verlieren, unterstützen auch aktuelle Implementierungen weiterhin diese und ähnliche Funktionen, warnen jedoch in der Regel, wenn sie beim Übersetzen im Quelltext benutzt werden. gets() wurde mit C11 endgültig aus der Sprachspezifikation entfernt. C ist nicht typsicher, da verschiedene Datentypen zuweisungskompatibel gehandhabt werden können. Literatur Einführungen Helmut Erlenkötter: C. Programmieren von Anfang an. 22. Auflage. Rowohlt, Reinbek bei Hamburg 2015, ISBN 978-3-499-60074-6. Joachim Goll: C als erste Programmiersprache. Mit den Konzepten von C11. 8., überarbeitete und erweiterte Auflage. Springer Vieweg, Wiesbaden 2014, ISBN 978-3-8348-1858-4. Robert Klima, Siegfried Selberherr: Programmieren in C. 3. Auflage. Springer, Wien 2010, ISBN 978-3-7091-0392-0. Peter Prinz, Ulla Kirch: C. Lernen und professionell anwenden. 3. Auflage. mitp, Heidelberg 2013, ISBN 978-3-8266-9504-9. Thomas Theis: Einstieg in C. Für Programmiereinsteiger geeignet. 1. Auflage. Galileo, Bonn 2014, ISBN 978-3-8362-2793-3. Jürgen Wolf: Grundkurs C. 2., aktualisierte und überarbeitete Auflage. Rheinwerk, Bonn 2016, ISBN 978-3-8362-4114-4. Fortgeschritten Andrew Koenig: Der C-Experte: Programmieren ohne Pannen. Addison-Wesley, 1989, ISBN 3-89319-233-6 (deutsche Übersetzung von: C Traps and Pitfalls. Addison-Wesley, 1989.) Peter van der Linden: Expert-C-Programmierung. Verlag Heinz Heise, 1995, ISBN 3-88229-047-1 (deutsche Übersetzung von: Expert C Programming. Prentice Hall, 1994.) Handbücher Rolf Isernhagen, Hartmut Helmke: Softwaretechnik in C und C++. Das Kompendium. Modulare, objektorientierte und generische Programmierung. ISO-C90, ISO-C99, ISO-C++98, MS-C++.NET. 4., vollständig überarbeitete Auflage, Hanser, München/Wien 2004, ISBN 3-446-22715-6. Jürgen Wolf: C von A bis Z. Das umfassende Handbuch. 3. aktualisierte und erweiterte Auflage 2009, 4., korrigierter Nachdruck 2015, Rheinwerk, Bonn 2015, ISBN 978-3-8362-1411-7. K&R C Brian Kernighan, Dennis Ritchie: The C Programming Language. Prentice Hall, Englewood Cliffs NJ 1978, ISBN 0-13-110163-3. (Deutsche Übersetzung: Brian Kernighan, Dennis Ritchie: Programmieren in C. Mit dem reference manual in deutscher Sprache. Hanser, München/Wien 1983) K&R2 Brian Kernighan, Dennis Ritchie: The C Programming Language. 2. Auflage, Prentice Hall, Englewood Cliffs NJ 1988, ISBN 0-13-110362-8. (Deutsche Übersetzung: Brian Kernighan, Dennis Ritchie: Programmieren in C. Mit dem C-Reference Manual in deutscher Sprache. 2. Auflage. Hanser, München/Wien 1990, ISBN 3-446-15497-3) Weblinks C-Sprachübersicht (sowie Vergleich mit BASIC). Coding Programmer Page / C Library Reference and Examples. (englisch). C Library Reference and Examples (more formal) (englisch). David Straker: C Style: Standards and Guidelines. 1991 erschienenes Buch (englisch). Mike Banahan, Declan Brady, Mark Doran: The C Book. 1991 (englisch). Einfaches C-Tutorial für Einsteiger (englisch). Einzelnachweise Imperative Programmiersprache Programmiersprache mit einem ISO-Standard Unix


source: wikipedia

text: Claire Catherine Danes (* 12. April 1979 in New York City) ist eine US-amerikanische Schauspielerin. Leben und Karriere Danes wurde in New York City als Tochter eines Künstlerpaares geboren. Ihre Mutter Carla Danes ist Bildhauerin und Grafikerin und agierte von 1993 bis 1999 auch als Managerin ihrer Tochter, ihr Vater Christopher Danes ist Architekturfotograf. Sie wuchs mit ihrem älteren Bruder Asa (* 1972), der heute als Anwalt arbeitet, in SoHo auf. Im Alter von sechs Jahren begann Danes mit Unterricht in Modern Dance und mit elf Jahren nahm sie am Lee Strasberg Theatre and Film Institute Schauspielunterricht. Woraufhin sie auf die Junior High School Professional Performing Arts School wechselte. Danes erzählt, dass sich ihr Fokus im Alter von neun Jahren vom Tanzen mehr hin zur Schauspielerei verlagerte. 1992 spielte sie in einer Episodenrolle in der Fernsehserie Law & Order. Als Zwölfjährige bekam sie ein Angebot für eine Rolle in Steven Spielbergs Schindlers Liste. Als man ihr jedoch für die Zeit der Dreharbeiten in Polen keinen Privatlehrer zusagen konnte, lehnten ihre Eltern die Rolle ab. 1994 spielte sie an der Seite von Winona Ryder in der Filmadaption Betty und ihre Schwestern Beth March. Sie besuchte die New York City Lab School for Collaborative Studies und ging für ein Jahr in die Dalton School, bevor sie mit ihren Eltern nach Santa Monica umzog, um die Rolle in My So-Called Life zu spielen. Ihre Hauptrolle in der Fernsehserie Willkommen im Leben (1994–1995) brachte Danes ihren ersten Golden Globe und eine Emmy-Nominierung ein und machte sie und ihren TV-Partner Jared Leto zu Filmstars. Ihr nun höherer Bekanntheitsgrad führte zu weiteren Filmrollen wie der Film Familienfest und andere Schwierigkeiten von Jodie Foster. 1996 folgte I Love You, I Love You Not und Schatten einer Liebe (To Gillian on Her 37th Birthday). Ihre erste Hauptrolle im Kino hatte sie 1996 mit einer modernen Variante von William Shakespeares Romeo + Julia neben Leonardo DiCaprio. Der Film bedeutete ihren internationalen Durchbruch als Filmschauspielerin. Danes wurde unter anderem mit dem London Critics’ Circle Film Award und dem MTV Movie Award ausgezeichnet. Für den Film Titanic wurde Claire Danes die Hauptrolle der Rose angeboten. Sie lehnte jedoch ab, weil sie kurz zuvor in Romeo & Julia schon mit Leonardo DiCaprio zusammen gespielt hatte und befürchtete, nicht mehr „von ihm loszukommen“. 1997 spielte sie in Der Regenmacher von Francis Ford Coppola neben Matt Damon und Danny DeVito und in Oliver Stones Film U-Turn – Kein Weg zurück war sie neben Sean Penn, Nick Nolte und Joaquin Phoenix zu sehen. 1997 machte Danes am Lycée Français de Los Angeles ihren Abschluss. 1998 begann sie nach 13 Filmen in fünf Jahren ein Psychologiestudium an der Yale University, mit einem von Oliver Stone verfassten Empfehlungsschreiben. Nach zwei Jahren brach sie das Studium ab um sich wieder auf ihre Filmkarriere zu konzentrieren. So war sie 2002 in Igby und dem Oscar-Nominierten The Hours – Von Ewigkeit zu Ewigkeit zu sehen. 2003 folgte Terminator 3 – Rebellion der Maschinen, für die Rolle Danes erst einen Tag vor Beginn der Dreharbeiten engagiert wurde. 2004 spielte sie in der Filmkomödie Stage Beauty. Für ihre Darstellung 2005 in Shopgirl und Die Familie Stone – Verloben verboten! wurde sie von Kritikern gelobt. In dem Fantasyfilm Der Sternwanderer von Regisseur Matthew Vaughn war sie 2007 neben Michelle Pfeiffer und Charlie Cox zu sehen. 2008 in Ich & Orson Welles mit Zac Efron. Für die Titelrolle der autistischen Tierwissenschaftlerin Temple Grandin in dem HBO-Fernsehfilm Du gehst nicht allein erhielt sie den Emmy, ihren zweiten Golden Globe und den Screen Actors Guild Award. Der Film wurde gut aufgenommen und Grandin selbst war von Danes Darstellung begeistert. Von 2011 bis 2020 spielte sie über acht Staffeln die Hauptrolle der Carrie Mathison in der Showtime-Serie Homeland, für die sie 2012 und 2013 mit zwei Golden Globes sowie zwei Emmys ausgezeichnet wurde. Im September 2015 bekam sie den 2559. Stern auf dem Hollywood Walk of Fame. 2018 war sie neben Jim Parsons und Octavia Spencer in dem Filmdrama Ein Kind wie Jake zu sehen. Privates Claire Danes hatte Beziehungen mit dem Schauspieler Matt Damon, dem australischen Musiker Ben Lee sowie mit dem Schauspieler Billy Crudup. Seit September 2009 ist Claire Danes mit ihrem Schauspielkollegen Hugh Dancy verheiratet, den sie 2006 bei den Dreharbeiten zum Film Spuren eines Lebens kennengelernt hat. Die beiden haben zwei Söhne (* 2012, * 2018) und eine Tochter (* 2023). Filmografie 1990: Dreams of Love (Kurzfilm) 1992: Law & Order (Fernsehserie, Folge 3x01 Vater-Mutter-Kind) 1993: No Room for Opal (Fernsehfilm) 1993: Geoffrey Beene 30 (Kurzfilm) 1994: Lifestories: Families in Crisis (Fernsehserie, Folge 1x08 More Than Friends) 1994: Betty und ihre Schwestern (Little Women) 1994–1995: Willkommen im Leben (My So-Called Life, Fernsehserie) 1995: The Pesky Suitor (Kurzfilm) 1995: Dead Man’s Jack (Kurzfilm) 1995: Ein amerikanischer Quilt (How to Make an American Quilt) 1995: Familienfest und andere Schwierigkeiten (Home for the Holidays) 1996: I Love You, I Love You Not 1996: Schatten einer Liebe (To Gillian on Her 37th Birthday) 1996: William Shakespeares Romeo + Julia (William Shakespeare’s Romeo + Juliet) 1997: Prinzessin Mononoke (Mononoke-hime, Sprechrolle) 1997: U-Turn – Kein Weg zurück (U-Turn) 1997: Saturday Night Live (Comedy-Show, Gastgeberin, 1 Folge) 1997: Der Regenmacher (The Rainmaker) 1998: Gestern war ich noch Jungfrau (Polish Wedding) 1998: Les Misérables 1999: Mod Squad – Cops auf Zeit (The Mod Squad) 1999: Brokedown Palace 2002: Igby (Igby Goes Down) 2002: The Hours – Von Ewigkeit zu Ewigkeit (The Hours) 2003: It’s All About Love 2003: The Rage in Placid Lake 2003: Terminator 3 – Rebellion der Maschinen (Terminator 3: Rise of the Machines) 2004: Stage Beauty 2005: Shopgirl 2005: Die Familie Stone – Verloben verboten! (The Family Stone) 2007: Spuren eines Lebens (Evening) 2007: The Flock – Dunkle Triebe (The Flock) 2007: Der Sternwanderer (Stardust) 2008: Ich & Orson Welles (Me and Orson Welles) 2010: Du gehst nicht allein (Temple Grandin, Fernsehfilm) 2011: A Child’s Garden of Poetry (Fernsehfilm, Sprechrolle) 2011–2020: Homeland (Fernsehserie, 96 Folgen) 2013: As Cool as I Am 2015: Master of None (Fernsehserie, Folge 1x05 The Other Man) 2017: Die Abenteuer von Brigsby Bär (Brigsby Bear) 2017: Portlandia (Fernsehserie, Folge The Storytellers) 2018: Ein Kind wie Jake (A Kid Like Jake) 2022: Die Schlange von Essex (The Essex Serpent, Miniserie, 6 Folgen) 2022: Fleishman Is in Trouble (Fernsehserie, 8 Folgen) Bühne 2000: The Vagina Monologues (Westside Theatre, New York City) 2005: Christina Olson: American Model (Rolle: Christina Olson, Performance Space 122, New York City) 2007: Edith and Jenny (Rolle Edith, Performance Space 122, New York City) 2007: Pygmalion (Rolle: Eliza Doolittle, American Airlines Theatre, New York City) 2016: Dry Powder (Rolle: Jenny, The Public Theater, New York City) Auszeichnungen Golden Globe Awards 1995: Auszeichnung als Beste Hauptdarstellerin in einer Drama-Serie für Willkommen im Leben 2011: Auszeichnung als Beste Hauptdarstellerin in einem Fernsehfilm für Du gehst nicht allein 2012: Auszeichnung als Beste Hauptdarstellerin in einer Drama-Serie für Homeland 2013: Auszeichnung als Beste Hauptdarstellerin in einer Drama-Serie für Homeland 2015: Nominierung als Beste Hauptdarstellerin in einer Drama-Serie für Homeland 2023: Nominierung als Beste Nebendarstellerin Serie/Fernsehfilm für ''Fleishman is in Trouble'' Screen Actors Guild Awards 2003: Nominierung für das Beste Schauspiel-Ensemble in einem Kinofilm für The Hours – Von Ewigkeit zu Ewigkeit 2011: Auszeichnung als Beste Hauptdarstellerin in einem Fernsehfilm für Du gehst nicht allein 2013: Nominierung für das Beste Schauspiel-Ensemble in einer Drama-Serie für Homeland 2013: Auszeichnung als Beste Hauptdarstellerin in einer Drama-Serie für Homeland 2014: Nominierung als Beste Hauptdarstellerin in einer Drama-Serie für Homeland Emmy Awards 1995: Nominierung als Beste Hauptdarstellerin in einer Drama-Serie für Willkommen im Leben 2010: Auszeichnung als Beste Hauptdarstellerin in einem Fernsehfilm für Du gehst nicht allein 2012: Auszeichnung als Beste Hauptdarstellerin in einer Drama-Serie für Homeland 2013: Auszeichnung als Beste Hauptdarstellerin in einer Drama-Serie für Homeland 2014: Nominierung als Beste Hauptdarstellerin in einer Drama-Serie für Homeland MTV Movie Awards 1997: Nominierung für den Besten Filmkuss (mit Leonardo DiCaprio) für Romeo + Julia 1997: Nominierung als Bestes Filmpaar (mit Leonardo DiCaprio) für Romeo + Julia 1997: Auszeichnung als Beste Schauspielerin für Romeo + Julia Weblinks Claire Danes Biografie bei WHO’S WHO Porträt von Claire Danes in: Die Süddeutsche Einzelnachweise Filmschauspieler Kinderdarsteller Emmy-Preisträger Golden-Globe-Preisträger Darstellender Künstler (New York City) US-Amerikaner Geboren 1979 Frau Absolvent der Yale University


text: C bzw. c (gesprochen: []) ist der dritte Buchstabe des klassischen und modernen lateinischen Alphabets. Er bezeichnete zunächst die velaren Verschlusslaute /k/ und /g/ (letzterer seit dem 3. Jh. v. Chr. durch das neugeschaffene G vertreten); infolge der seit dem Spätlateinischen bezeugten Assibilierung vor Vorderzungenvokal bezeichnet c in den meisten romanischen und noch vielen anderen Sprachen auch eine (post-)alveolare Affrikate (ital. , dt., poln., tschech. ) oder einen dentalen oder alveolaren Reibelaut (engl., franz. , span. []). Der Buchstabe C hat in deutschsprachigen Texten eine durchschnittliche Häufigkeit von 3,06 %. Das Fingeralphabet für Gehörlose bzw. Schwerhörige stellt den Buchstaben C dar, indem der Daumen und restliche Finger einen offenen Halbkreis bilden. Aussprache In den meisten romanischen Sprachen sowie verbreitet in der mittelalterlichen und neuzeitlichen Aussprache des Lateins und zahlreicher daraus entlehnter Wörter steht c vor Konsonanten und hinteren Vokalen (einschließlich /a/) für den stimmlosen velaren Plosiv /k/, vor ursprünglichen Vorderzungenvokalen e, i (auch vor lat. ae, oe, y) dagegen für einen Zischlaut (je nach Sprache und Sprachstufe eine Affrikate , oder ein reiner Frikativ /s/, , ; vgl. Romanische Palatalisierung). Die Verteilung dieser Allophone nach darauffolgendem Vokal wird gelegentlich in sprachspezifischer Lautschrift durch die Reihe ka – ce/ze – ci/zi – ko – ku (sogenannte Ka-ze-zi-ko-ku-Regel) wiedergegeben oder einen Merkspruch folgender Art zusammengefasst: „Vor a, o, u sprich c wie k, vor e und i sprich c wie z.“ Wo ein solcher Zischlaut vor einem hinteren Konsonanten wie /a/, /o/, /u/ (oder einem erst später daraus entstandenen Vorderzungenvokal, etwa frz. [y] < lat. /u/) steht, wird er oft durch ç, z, oder (im Italienischen) den Digraphen ci bezeichnet. Umgekehrt tritt für den Velaren vor vorderem Vokal k, im Französischen regelmäßig qu, im Italienischen ch ein. Darüber hinaus wird der Buchstabe c zum Teil auch allgemein durch z bzw. k ersetzt, z. B. im heutigen Deutsch bei lateinischen Lehnwörtern: Zirkus statt Circus. Außerhalb des Italienischen steht der Digraph ch in vielen romanischen Sprachen ebenfalls für einen Zischlaut, im Deutschen und im Gälischen für einen velaren oder palatalen Reibelaut. Meist dient die Kombination ck im Deutschen als Variante von k zur Kennzeichnung eines Silbengelenks, steht also nach kurzen geschlossenen Silben; es findet sich aber bei norddeutschen Orts- und Familiennamen teilweise ein ck auch nach offenen Silben bzw. langen Vokalen (z. B. Mecklenburg (ˈmeː-), Buddenbroock); der Trigraph sch stellt den Laut [] dar (wie in Schule). Herkunft Die aus der protosinaitischen Schrift stammende Urform des Buchstabens stellt einen Fuß dar. Im phönizischen Alphabet wurde diese Bedeutung beibehalten. Der Buchstabe erhielt den Namen Gimel (Kamel) und hatte den Lautwert [g]. Die Griechen übernahmen den Buchstaben als Gamma. Zu Beginn wurde das Gamma in einer Form geschrieben, die wie ein Dach aussah (ähnlich dem späteren Lambda). Bis zur klassischen Zeit entwickelte sich das Gamma zu Γ weiter. Mit dafür verantwortlich war wahrscheinlich neben dem Wechsel der Schreibrichtung von rechts-nach-links auf links-nach-rechts auch der notwendige Wechsel der Schreibwerkzeuge zum Beschreiben von organischen Stoffen. Als die Etrusker das frühgriechische Alphabet übernahmen, hatten sie keine Verwendung für das Gamma, da im Etruskischen stimmhafte Verschlusslaute wie [g] nicht vorkamen. Allerdings hatte die etruskische Sprache drei k-Laute. Die Etrusker veränderten daher den Lautwert des Buchstabens, um den stimmlosen Verschlusslaut [k] vor [e] oder [i] wiederzugeben. Mit eben dem Lautwert wanderte das Zeichen C dann in das lateinische Alphabet und wurde von den Römern, die durchaus zwischen der Tenuis K und der Media G unterschieden, so ursprünglich für die Laute [g] und [k], genauer, für die Silben [ge]; [gi] und [ke]; [ki] gesetzt. Wenn auch in archaischer Zeit in der lateinischen Schriftpraxis drei von ihren nachfolgenden Lauten unterschiedlich gefärbte [k]-Laute zeichenmäßig noch nicht konsequent unterschieden wurden, so setzte doch eine Differenzierung ein, nämlich C vor [e], [i], K vor [a] und Liquiden, Q vor [o], [u], von denen der Erstere auch noch für unser heutiges G verantwortlich ist. Bereits im 4. Jahrhundert v. Chr. kam dieser Prozess zum Abschluss, indem der Buchstabe Q nur noch vor das konsonantische [u] gestellt, während der Buchstabe K ab dem 3. Jahrhundert v. Chr. nur noch in formelhaften Abkürzungen, wie Kal. = Kalendae und dem Brandmal K. = Kalumniator vorkam. Beide Buchstaben wurden zugunsten des C verdrängt. Zunächst wurde das C auch noch für den [g]-Laut verwendet. Nach Plutarch (Quest. Rom. 54) war es 230 v. Chr. der Schreibschulen-Betreiber Spurius Carvilius Ruga, der durch Hinzufügung eines Striches das G als eigenständigen Buchstaben schuf und ihn an die Stelle ins Alphabet einfügte, welche der [ts]-Laut, also das griechische Zeta, im griechischen Alphabet einnahm. Der entsprechende Buchstabe Z an dieser Stelle war im Lateinischen zuvor durch den Censor Appius Claudius Caecus seit 312 v. Chr. (Marc. Capella: 1,3) obsolet geworden, da er im Lateinischen außer als Zahlzeichen keinen wirklichen Nutzen hatte. Im Unterschied dazu wurde bei der späteren Einfügung des griechischen Y und der erneuten Übernahme des Z aus dem Griechischen das lateinische Alphabet am Ende ergänzt. Erhalten blieb das Zeichen C als [ge]-Laut nur in den Abkürzungen C. ≙ Gaius und CN. ≙ Gnaeus. Zitat Da wir, gleich den Griechen und Slaven, die tenuis des gutturallauts mit K ausdrücken, so ist dafür das aus dem lateinischen Alphabet entnommene C ganz überflüssig, fehlt darum auch der gothischen und altnordischen schrift, die Slaven verwenden es für S, die Polen und Böhmen für Z. (...) unentbehrlich aber bleibt, solange wir für die kehlaspirata kein einfaches Zeichen, wie die Gothen das gr. X, annehmen, C in CH. (aus dem Grimmschen Wörterbuch) Siehe auch das griechische Sigma, insbesondere dessen Glyphen ς (finales Sigma) und Σ, ς (Unzialen) – dort auch weitere Verweise. der kyrillische Buchstabe Es, С, с , ⱅ, Semma, ein Buchstabe des koptischen Alphabets, siehe koptische Schrift Unicode-Zeichen, die vom lateinischen C, c abgeleitet sind: ¢, das Cent-Zeichen; ₡, das Colón-Zeichen; ₵, das Cedi-Zeichen °C, Grad Celsius (statt dieses einen Zeichens sollte besser die Kombination aus ° und C verwendet werden.) Römisches Zahlzeichen 100: C, c c/o, (care of, engl.) zu Händen; c/u, (cada una, span.) im Einzelnen gestreckt: ʗ (früher auch IPA-Zeichen; hochgestellt: ͨ; Kapitälchen: ᴄ; Fraktur: C) gedreht: Kleinbuchstabe ↄ; römisches Zahlzeichen Ↄ umkreistes C: C; Copyrightzeichen c; Copyleftzeichen 🄯 geklammertes kleines c: (c) C*: Bremsenkennwert Weblinks http://www.wam.umd.edu/~rfradkin/alphapage.html http://www.weikopf.de/Sprache/Schrift/Alphabet/body_alphabet.html Quellen Lateinischer Buchstabe


text: C4, C 4 oder C-4 steht für: Besoldungsgruppe C 4, historische deutsche Besoldungsgruppe, siehe Besoldungsordnung C #Besoldungsgruppe C 4 C-4, Teleskop des Herstellers Celestron, siehe Celestron #Produktreihe C4 model, (context, containers, components, and code), grafische Notationstechnik zur Modellierung der Architektur von Softwaresystemen C4 (Neuseeland), Channel Four, ein ehemaliger neuseeländischer Fernsehsender C4 (Sprengstoff), Composition Compound 4, Sprengstoff C4, Controlled Collapsed Chip Connection, Technologie der Halbleiterproduktion, siehe Flip Chip #C4-Technologie C4, zeitweise Modellbezeichnung Schweizer Straßenbahnwagen, siehe Schweizer Standardwagen C4, Bezeichnung einer Bootsklasse im Kanurennsport, siehe Vierer-Canadier C4, Bezeichnung des vierten Halswirbels, siehe Halswirbelsäule C4, Cybercrime Competence Center beim Bundeskriminalamt (Österreich) C4, militärisches Akronym für Command and Control, Communications, Computers, siehe C4ISR C4-Pflanzen, bestimmte Gruppe Pflanzen mit einer Stoffwechselbesonderheit, siehe C4-Pflanze DIN C4, Papierformat und Standard-Größe für Briefumschläge, siehe Papierformat #Übersicht und Briefumschlag #Größen Caldwell 4, offener Sternhaufen und Nebel Architektengemeinschaft C4, Vorarlberger Architektengruppe (von 1960 bis 1979) Kraftfahrzeuge: Audi 100 C4, obere Mittelklasse Audi A6 C4, obere Mittelklasse Citroën C4, Kompaktklasse Citroën C4 Aircross, Kompaktklasse Citroën C4 Cactus, Kompaktklasse Citroën C4 Picasso, Kompaktvanklasse Coloni C4, Formel-1-Rennwagen Corvette C4, Sportwagenklasse C.4 steht für: Cierva C.4, Tragschrauber C4