Zum Forum
Passwort vergessen?
Noch keinen Account?
lexikon
Hauptseite
Zufälliger Artikel
Diskussion
Diskussion : C (Programmiersprache)
Links
Forum
Portale
Reisen
Versicherung
Inhaltsverzeichnis
Hauptmenü
Home
Editorial
Bildung
E-Learning
Fremdsprachen
Magazin
Wissen
Wörterbücher
Enzyklopädien
Expertendienste
Wissenswertes
Praktische Ratgeber
--------------------------
Biologie
Chemie
Computer
Film/ Theater
Geografie
Geschichte
Jura
Kunst
Literatur
Mathematik
Medizin
Musik
Philosophie
Physik/ Astronomie
Politik
Psychologie
Religionen
Sport
Umwelt
Wirtschaft
Reisen
Lexikon
Versicherung
Suchen
Schnellsuche
Suchmaschinen
Metasuchmaschinen
Webkataloge
News
Treffpunkt
Chat
Forum
Suche
Schnellsuche
Sitemap
Kontakt
Impressum
C (Programmiersprache)
Stichpunkte
Allgemein
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 Laboratories
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 Sprache C++ ist aus C hervorgegangen und gegenüber C unter anderem um Möglichkeiten zur objektorientierten und generischen Programmierung erweitert. Inhaltsverzeichnis showTocToggle("Anzeigen"
"Verbergen") 1 Überblick 2 Hallo-Welt-Programm in C 3 Programmieren in C 3.1 Beschreibung der Sprache 3.2 Die Standardbibliothek 3.3 Weitere C-Bibliotheken 3.4 Algorithmen 3.5 Werkzeuge 4 Bewertung von Sprachmerkmalen 4.1 Stärken 4.2 Schwächen 4.3 Zusammenfassung 5 Siehe auch 6 Literatur 7 IRC 8 Weblinks [Bearbeiten]
Überblick
die auf fast allen Computersystemen zur Verfügung steht
C ist eine Programmiersprache
Im Gegensatz zu z.B
BASIC gibt es seit der Definition von ANSI C relativ einheitliche Implementierungen auf den verschiedenen Plattformen
In jedem C-System steht auch die genormte Standard C Library zur Verfügung
sowohl im kommerziellen als auch im Open-Source-Bereich
Dies und die sehr gute Performance der resultierenden Programme erklärt die weiterhin relativ hohe Popularität der Sprache
Es gibt Meinungen
manchmal wird C auch als portierbarer Highlevel-Assembler bezeichnet
dass C softwaretechnologisch gesehen nicht dem heutigen Stand der Technik entspreche
wenn auch in der jetzigen
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
ISO-genormten Form erst seit 1998)
Dem lässt sich entgegen halten
C eignet sich gut für die Systemprogrammierung
Anders sieht die Sache jedoch bei der Anwendungsentwicklung aus
Entwurfsunterstützung und Abstraktionsniveau erweitern und verbessern
dass sie alle über Möglichkeiten zur objektorientierten Programmierung verfügen und C im Bezug auf Wartbarkeit
die gemeinsam haben
Dort wird C zunehmend durch die Sprachen C++
Java und C# verdrängt
so dass sich dies vom einfachsten Mikrocontroller bis zum Großrechner-Prozessor praktisch immer lohnt
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
egal für welche Plattform er programmiert
einen C-Compiler zu bekommen
Für den Entwickler bedeutet das
immer davon ausgehen kann
dass er
Die prozessor-spezifische Programmierung in Assembler bleibt ihm dadurch ganz oder weitgehend erspart
und dieser wird (ganz ohne oder mit kleinen Änderungen) laufen
auf eine neue Plattform mitnehmen
und er kann Quellcode
den er für andere Plattformen geschrieben hat
Die Sprachbeschreibung wurde 1972 erstmals publiziert
Im Jahre 1989 wurde die Sprache erstmals standardisiert (C89)
der als C99 bekannt ist
Dieser Standard wurde überarbeitet und 1999 erschien dann der internationale Standard ISO/IEC 9899:1999
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
Neben Programmen kann man aber auch noch Bibliotheken erstellen
Diese 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
tausende unveränderliche Objektcodedateien immer wieder erneut gebunden werden müssen. [Bearbeiten]
dass für jedes Programm das erzeugt wird
Auf diese Weise kann man verhindern
Hallo-Welt-Programm
in C
das die Meldung Hallo Welt und einen Zeilenumbruch auf dem Standardausgabemedium ausgibt. #include <stdio.h> int main (void) { printf("Hallo Welt!n"); return 0; } In der ersten Zeile wird durch die Präprozessordirektive #include <stdio.h> ein Verweis auf Ein-/Ausgabe-Bibliothek stdio angegeben
Der folgende Quelltext stellt ein einfaches C-Programm dar
s.u
Weiteres hierzu
In der dritten Zeile beginnt der Programmablauf
Es ist der Aufruf der Funktion 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). Die erste Anweisung in der Funktion main ist eine Ausdrucksanweisung welche die Funktion printf aufruft
Diese Funktion ist nicht Teil des Sprachkerns
sondern der Standardbibliothek
Daher muss sie (gemäß C99) vor ihrer Verwendung deklariert werden
die in der ersten Zeile angegeben wurde
Dies geschieht durch die Präprozessordirektive #include <stdio.h>
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
Die zweite Anweisung ist die Sprung-Anweisung 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
Man kann der Funktion main beim Aufruf Werte übergeben
die dann zwischen den runden Klammern angegeben werden
Man spricht dabei auch von Parameterliste
dass keine Werte übergeben werden
Wird void zwischen den Klammern angegeben
dann hat das die Bedeutung
Fügt man hingegen den Text int argc
lässt sich während des Programmablaufs mittels der Ganzzahlvariable argc die Anzahl der beim Programmstart übergebenen Argumente abfragen: int main (int argc
wobei hierzu eine Ganzzahl zwischen 0 und n in die eckigen Klammern von argv[] einzusetzen ist
char *argv[] in die Parameterliste ein
char* argv[]) { // ... } <code> Ein Zugriff auf die C-String-Reihung argv[] ermöglicht die Abfrage des n-ten Arguments
Nach der Abarbeitung erhält man von der Funktion <code>main einen Wert zurück
Dieser Wert ist vom Typ int
Typ int heißt
dass eine Ganzzahl zurückgeliefert wird. [Bearbeiten]
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
ANSI-kompatibel zu sein
die jedem C-Compiler zur Verfügung stehen
solange der Compiler den Anspruch hat
Der Sprachkern wird in dem Kapitel zur Beschreibung der Sprache genauer erklärt werden. Die Bibliotheksfunktionen
so ist es auf jedem System
die von dem (Betriebs-)System zur Verfügung gestellt werden
Verwendet ein Programm lediglich den Sprachkern gemäß der Sprachdefinition und die Standardbibliothek
übersetzbar und zeigt auch auf allen Systemen das gleiche Verhalten. Die Bibliotheksfunktionen
das einen ANSI-kompatiblen Compiler zur Verfügung stellt
Diese Bibliotheken stammen also nicht von einem ANSI-kompatiblen Compiler
nur bedingt portabel
Daher sind Programme
die diese Bibliotheken verwenden
Ein Teil dieser Bibliotheken wird in dem Kapitel Weitere C-Bibliotheken beschrieben. Die Erweiterungen des Sprachkerns
die von einem Compiler zur Verfügung gestellt werden
Diese Erweiterungen betreffen die Werkzeuge. [Bearbeiten]
Beschreibung der Sprache
Die Beschreibung der Sprache bezieht sich auf das Kapitel 6
Language in C99. Konzepte Geltungsbereich von Bezeichnern Bindung von Bezeichnern Speicherdauer von Objekten Typen lexikalische Elemente Schlüsselwörter Bezeichner Konstanten Kommentare Deklarationen / Definition Ausdrücke Anweisungen Der Präprozessor [Bearbeiten]
Die Standardbibliothek
die jedem Compiler zur Verfügung steht
Die Standardbibliothek beschreibt die Makros und Funktionen
Ihr ist der Artikel Standard C Library gewidmet. [Bearbeiten]
Weitere C-Bibliotheken
Die nachfolgend beschriebenen Bibliotheken sind nicht Teil der Sprachbeschreibung von C
Daher stehen sie nur zur Verfügung
wenn die API des Systems sie anbietet. POSIX - Programmierung einer UNIX-Umgebung pcre - Perl Compatible Regular Expressions Zugriff auf eine MySQL-Datenbank [Bearbeiten]
Algorithmen
verkettete Listen binäre Bäume [Bearbeiten]
Werkzeuge
GNU C-Compiler GNU Debugger [Bearbeiten]
Bewertung von Sprachmerkmalen
[Bearbeiten]
Stärken
Bytes
die das Einbinden von externen vorübersetzten Routinen in der Sprachdefinition berücksichtigt) Viele Optimierungen bei Übersetzung möglich Ein C-Compiler ist auf nahezu jedem modernen Prozessor vorhanden
direkter Umgang mit Bits
direkter Speicherzugriff und Zeigerarithmetik Präprozessor zur Spracherweiterung und bedingten Übersetzung Linker (Binder) (C war eine der ersten Sprachen
struct
minimalistischer Sprachumfang
Felder nur als Referenzparameter Referenzparameter für einfache Variablen werden durch Zeiger ersetzt. Hardwarenahe Programmierung ist möglich
sei es ein kleiner 8-Bit-Controller oder ein High-End-64-Bit-Prozessor. [Bearbeiten]
der kleinste bekannte C-Compiler besteht aus 3742 Bytes C-Code und kann sich selbst kompilieren. C-Programme bestehen nur aus Unterprogrammen. Das Hauptprogramm ist ein Unterprogramm mit dem speziellen Namen main Kontrollstrukturen für strukturierte Programmierung Umfangreiche Datenstrukturen (Feldkonstanten
Parametern usw. Strings ersetzt durch eingebaute Stringkonstanten und einfache Bibliotheksfunktionen Zeiger auf Unterprogramme (Funktionszeiger) in Datenstrukturen speicherbar Einfache Variablen nur als Wertparameter
Bitfelder) Vorbelegung aller Datenstrukturen mit Konstanten Keine symbolischen Konstanten (ersetzt durch Makroprozessor) Keine dynamische Speicherverwaltung (ersetzt durch Bibliotheksfunktionen) Keine Felder (ersetzt durch Feldkonstanten und Behandlung von Feldern als Zeiger) Zeigerarithmetik ermöglicht die effiziente Behandlung von Feldzugriffen
Schwächen
"Wilde" Zeiger Man kann Zeiger auf beliebige Stellen des Speichers richten
Insbesondere zeigen nicht explizit initialisierte Stack-Variablen oft auf beliebige Stellen des Speichers
die mit Konstanten vorbelegt sind
Die Folge sind schwer zu diagnostizierende Fehler. Felder C kennt zwar den Datentyp Feld und erlaubt sogar die Definition von Feldern
Intern werden Felder jedoch immer als Zeiger verwaltet
dass eine eventuell nötige dynamische Speicherverwaltung von Feldern vom Programmierer implementiert werden muss
Dies bedeutet
Auch die Feldgröße wird beim Zugriff nicht überprüft
Durch Programmierfehler können Speicherbereiche durch illegale Feldzugriffe während der Laufzeit unabsichtlich oder gezielt (Pufferüberlauf) verändert werden. Zeichenketten C hat keine integrierten Zeichenketten ("Strings")
Statt dessen wird ein Zeichenfeld verwendet
das mit einem Nullzeichen abgeschlossen wird
Die Speicherverwaltung von Zeichenketten muss vom Programmierer vorgenommen werden. Speicherverwaltung Der Programmierer muss den dynamischen Speicher selbst verwalten
Hierzu stehen in der Regel Bibliotheksfunktionen zur Verfügung. niedriger Abstraktionsgrad Portabilitätsprobleme C schreibt die Speichergröße verschiedener Typen in der Sprachdefinition nicht vor
Dies ermöglicht die Portierung bestehender Programme auf andere
auch neue Prozessoren
Es ist nur zugesichert
dass ein short int nicht länger sein darf als ein long int
68000
i386 eingesetzt
In den 1980er und 1990er Jahren wurden vorwiegend 32-Bit Systeme wie VAX
Bei diesen waren Zeiger
so dass sich dies als Quasistandard etabliert hat
int und long alle 32 Bits lang
int16_t
falls der Programmierer von bestimmten Längen ausgegangen ist. Einige weitere Eigenschaften der Sprachdefinition (Ergebnistyp bei Zeigersubtraktion
wenn statt der empfohlenen abstrakten Typen (wie ptrdiff_t für Zeigersubtraktionen
Dies bereitet Probleme bei der Portierung auf modernere 64-Bit-Architekturen
etc.). [Bearbeiten]
Ausrichtung (Alignment) von Datentypen) bereiten ebenfalls Probleme
size_t für Größen von Speicherbereichen) direkt fundamentale Typen wie int verwendet werden. In der Sprachversion C99 sind Datentypen mit expliziten Bit-Längen definiert (int8_t
Zusammenfassung
Man kann sagen
diese Programmiersprache bei neuen Projekten zu verbieten. [Bearbeiten]
Börsen
wird hier mittlerweile ernsthaft erwogen
dass die größte Stärke von C - die 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 (Kreditinstituten
usw.) leicht hohe Schäden nach sich ziehen kann
Versicherungen
Siehe auch
C++ Java C# Objective-C GCC Zeittafel der Programmiersprachen DISTCC C-Programmierkurs auf Wikibooks Escape-Sequenz [Bearbeiten]
Literatur
ISBN 3-898-42392-1 Brian W
Jürgen Wolf: C von A bis Z - das umfassende Handbuch
Galileo Computing
Hanser Fachbuch
Dennis Ritchie: Programmieren in C
ISBN 3-446-15497-3 Wolfgang Sommergut: Programmieren in C
ISBN 3-423-50158-8 Byron S
DTV-Beck
Kernighan
Gottfried: Programmieren in C
ISBN 3-7723-6200-1 Ulrich Cuber: C-Programmierung
Addison-Wesley
ISBN 3-8266-7216-X Wolfgang Link: C-Programmierung
Fachbuchverlag Leipzig
Ulrich Bröckl
Michael Dausmann: C als erste Programmiersprache - Vom Einsteiger zum Profi
1988
ISBN 3-519-32999-9 Andre Willms: C-Programmierung lernen - Anfangen
1988
Econ
ISBN 389028907X Robert Klima
Hanser Fachbuch
ISBN 3-446-21981-1 Stefan Heitsiek: Das Einsteigerseminar C
vmi Buch
ISBN 3-925118-21-7 Robert Ward: Debugging C
ISBN 3-612-28157-7 Robert Sedgewick: Algorithmen in C
Markt+Technik
Rowohlt
Siegfried Selberherr: Programmieren in C
McGraw-Hill
ISBN 3-89319-376-6 Al Kelley
ISBN 3-8273-1405-4 Karlheinz Zeiner: Programmieren lernen mit C
ISBN 3-211-40514-3 Helmut Erlenkötter: C - Programmieren von Anfang an
ISBN 3-499-60074-9 Joachim Goll
anwenden
Ira Pohl: C
Addison-Wesley
Franzis
Grundlagen und Anwendungen
Addison-Wesley
ISBN 3-925118-90-X [Bearbeiten]
Teubner
ISBN 3-446-21596-4 Jürgen Wolf: C - Mit einfachen Beispielen programmieren
ISBN 3-8272-6503-7 Henning Mittelbach: Einführung in C
Addison-Wesley
Springer
verstehen
IRC
wo Sie Hilfe bekommen können
Einen deutschsprachigen IRC Channel
finden Sie im irc.euirc.net:6667 in #C [Bearbeiten]
Weblinks
Referenz (http://www.schellong.de/c.htm) Doku der GLibc
Tutorium... (http://faul.dyndns.org/c/) Die Programmiersprache C kritisch betrachtet (http://www.wackerart.de/c.html) LCC-Win32 eine ANSI-C Entwicklungsumgebung für Windows (http://www.cs.virginia.edu/~lcc-win32/) C von A bis Z (http://pronix.de/modules/C/openbook/) (Online-Version des Buches) C in 21 Tagen (http://wwwuser.gwdg.de/~kboehm/ebook/inhalt.html) (Online-Version des Buches) The GNU C Programming Tutorial (http://crasseux.com/books/ctutorial/index.html) C programmieren lernen (http://www.c-lernen.de/) C Programmierkurs (http://www.ewetel.net/~wolfgang.basse/homepage/c-c_plusplus/c_lernkurs.htm) Einführung in C (http://www.eggdrop.ch/texts/c/) bg:C (език за програмиране) ca:Llenguatge C cs:Jazyk C da:C (programmeringssprog) en:C programming language eo:C (programlingvo) es:Lenguaje de programación C et:C (programmeerimiskeel) fi:C-ohjelmointikieli fr:C (langage) he:C (שפת ×ª×›× ×•×ª) hu:C programozási nyelv is:Forritunarmálið C it:C (linguaggio) ja:C言語 lt:C (kalba) lv:C (programmēšanas valoda) ms:Bahasa pengaturcaraan C nl:Programmeertaal C no:C (programmeringssprÃ¥k) pl:C (jÄ™zyk programowania) pt:C (linguagem de programação) ru:Си (Ñ?зык программированиÑ?) sv:C (programsprÃ¥k) th:ภาษาซี tr:C programlama dili zh:Cè¯è¨€
Doku der ANSI-C-Library
Vorlage:Wikibooks1 Vorlage:Wikibooks1 Programming in C (http://www.lysator.liu.se/c/) Dinkumware (http://www.dinkumware.com/) Die FAQ der deutschsprachigen Gruppe news:de.comp.lang.c (http://home.pages.de/~c-faq) Die FAQ der englischsprachigen Gruppe news:comp.lang.c (http://www.eskimo.com/~scs/C-faq/top.html) C/C++ Users Journal (http://www.cuj.com/) Tutorium
[X] Schliessen
Dieser Artikel basiert auf dem Artikel
C (Programmiersprache)
aus der freien Enzyklopädie
wikipedia
und steht unter der
GNU Lizenz für freie Dokumentation
. In der wikipedia ist eine
Liste der Autoren
verfügbar.
Claire Danes
C
C4
Chemische Waffe
Cruise Missile
Clipboard
Champlain-See
Cha Cha Cha
Computerprogramm
[ Zurück ]
Inhalt Lexikon:
A
B
C
D
E
F
G
H
I
J
K
L
M
N
O
P
Q
R
S
T
U
V
W
X
Y
Z
1
2
3
4
5
6
7
8
9
Chat
|
Lexikon
|
Reisen
|
Versicherung
|
Forum
|
Kontakt