C++

Klassiker der modernen Programmiersprachen

Die Programmiersprache C/C++ ist der Klassiker, an dem alle neueren Sprachen gemessen werden. In der Praxis wird C/C++ vorwiegend im professionellen Bereich verwendet, und zwar für zeitkritische Aufgaben, die mit maximaler Geschwindigkeit ausgeführt werden sollen..
Geschichte Die Entwicklung von C und C++
Stichworte Compiler, Linker, Bibliotheken, Anwendung, Verbreitung, ...
Elemente Bekannte und gefürchtete Elemente von C++: Pointer, Klassen, ...
Entwicklung Compiler, Linker und IDE
C/C++ Themen auf anderen Seiten dieses Webs:
Compiler Ausrüstung zum Programmieren mit C/C++
Ausgabe Funktion printf() für wenig geübte und fortgeschrittene EntwicklerInnen
BitLevel BitLevel-Operatoren NOT, AND, OR, SHIFT, 2er-Komplement
Datum & Zeit <time.h>, Objekte, Strukturen und Funktionen
Ganze Zahlen Abschneiden, Runden, Modulo (Rest)
Grafik Erzeugung von Pixel- und Objekt-Grafik
System System-(Konsolen)-Befehle ausführen, Antwort-Text analysieren
Umgebung Umgebungs-Variable, Argumente (CLI, GET, POST)
XML Erzeugung 'Interlligenter' Text-Produkte: HTML, XML, SVG, ...
Zufallsfolgen Erzeugung von Zufallszahlen und -Zeichen für verschiedene Anforderungen
Beispiele Bernoulli-Zahlen, Binomial-Koeffizienten, Exponential-Funktion, Fakultät, Fibonacci-Folge, Julia-Funktionen, Kartografie (UTM-Längen-Zone), Legendre-Polynome, Mandelbrot-Funktion, Reihen-Entwicklungen (ArcusTangens, Cosinus, Sinus, Quadratwurzel)
Links CPP-Links Ausgewählte Links zum Thema 'C++'

Die Entwicklung von C und C++

Dennis Ritchie (Bell) Die Sprache C wurde von Dennis Ritchie (Bild) in Zusammenarbeit mit Brian Kerninghan (rechts) in den AT&T Bell Labs entwickelt. Das Ziel war eine Programmiersprache für das Betriebssystem UNIX. Heute sind C und seine Nachfolge-Versionen auf allen Betriebssystemen verfügbar.

Der Name "C" bezeichnet die Programmiersprache als Nachfolger von "A" (APL) und "B" (BCPL), die beide bedeutungslos blieben.

Die Programmiersprachen C und C++ sind frei und können ohne Lizenz verwendet werden.
Brian Kernighan (Homepage) 1978 erschien das klassische Buch 'The C Programming Language' von Kernighan (rechts) & Ritchie, in dem die Sprache öffentlich vorgestellt wurde.

Dieses Buch ist bis heute ein Beispiel für eine hervorragende technische Publikation. Auf nur ca. 200 Seiten wird ein bestechend klares Konzept vorgestellt. Das Buch ist unerwartet spannend und lesbar, ganz im Gegensatz zu ähnlichen Werken mit dem Unterhaltungswert von Telefonbüchern.
Einige der im Buch vorgestellten Programm-Beispiele sind zu Klassikern der Programmier-Ausbildung geworden.

Die Original-Version von 1978 ist als "K&R"-Version der Sprache C bekannt und wird heute in dieser einfachen Form kaum mehr verwendet.
Bjarne Stroustrup (Univ Texas) 1979 begann Bjaarne Stroustrup (Bild Univ Texas) ebenfalls bei AT&T Bell Labs die Fortsetzung und Erweiterung von C.

Dabei wurde C um das Konzept der Objekt-Orientierten Programmierung (Klassen) erweitert.

Diese Version ist als C++ (cpp) die Grundlage aller heute verwendeten Varianten von C.
1985 erschien die erste kommerzielle Version von C++.

1988 publizierte Stroustrup das Buch "The C++ Programming Language" mit der öffentlichen Vorstellung der Objekt-orientierten Programmierung in C++.

Die wesentlichen Elemente von C++ sind in allen modernen Programmiersprachen enthalten. Diese selbst (Compiler, Interpreter, Module, ...) sind übrigens fast ausschließlich in C++ programmiert.
1988 wurde die Programmiersprache C erstmals international standardidiert. Diese Version ist als ANSI C bekannt.
Dabei wurden insbesondere die für C wichtigen Standard-Bibliotheken genau festgelegt.
Kernighan & Ritchie gaben im gleichen Jahr eine 2. Auflage ihres Buchs unter Berücksichtigung von ANSI C heraus.

1989 erschien die Version 2 von C++

1998 wurde C++ als Standard ISO/IEC 14882 definiert.
1999 wurde C als Standard ISO/IEC 9899 definiert. Diese Version C99 ist die Grundlage der heute verwendeten Sprache.

2000 wurde die C99 Version auch als ANSI definiert (ANSI C++ 3.0)

2003 erschien eine korrigierte Version des C++ Standards von 1998
2001 wurde von Microsoft die stark abgewandelte Variante C# (C Sharp) vorgestellt. Sie wurde für den internen Gebrauch entwickelt, um damit die Microsoft-eigene Programmiersprache .NET zu programmieren. Später wurde C# sogar von ECMA (ECMA-334) und ISO (ISO/IEC 23270) standardisiert, erlangte jedoch (ebenso wie .NET) außerhalb der Microsoft-Welt keine Bedeutung.
Tipp: Sauber erstellte Programme in Standard C oder C++ laufen problemlos mit allen Compilern auf allen Betriebssystemen, auch auf Windows...

Die Programmiersprache C / C++

Heute wird nur mehr die C++ Version der Programmiersprache verwendet. Die Unterschiede zwischen C und C++ haben keine praktische Bedeutung mehr. Alle weiteren Angaben dieser Seite (und der übrigen Webseiten zum Thema C) verwenden den Namen "C". Damit ist C++ in der aktuellen Version gemeint.

Compiler

C-Programme werden in Klartext (Quelltext, Source-Code) verfasst und in Dateien gespeichert. Daraus erstellt ein Compiler-Programm das lauffähige Programm in der Maschinensprache des jeweiligen Computers.

Man benötigt daher zur Herstellung von C-Programmen einen Compiler. Die Compiler unterscheiden sich je nach Betriebssystem und sind nicht portabel. Jedes Linux System verfügt über einen C-Compiler, der nicht auf Windows übertragbar ist. Für Windows gibt es eigene (auch kostenlose) C-Compiler, die allerdings eine weit geringere Verbreitung haben als auf Linux.

Details zu den Compiler-Themen GNU Compiler Collection (GCC, MinGW), Code::Blocks, Eclipse

Die vom Compiler erzeugten Programme (Linux-Binaries, Windows *.exe) laufen nur auf jenen Betriebssystemen, für die sie erzeugt wurden. Ein typisches C-Programm muss daher mindestens für Linux und Windows getrennt compiliert werden, manchmal auch für einzelne Versionen aller gängigen Betriebssysteme.

Der C-Quelltext ist allerdings sehr gut portabel. Man findet im Internet die Quelltexte unzähliger C-Programme, aus denen man am eigenen PC ein lauffähiges Programm compilieren kann. Diese Programme können mit zahlreichen Optionen, Modulen usw. genau an den jeweiligen Bedarf angepasst werden. Ein C-Programm kann je nach Bedarf auf maximale Geschwindigkeit oder minimale Größe optimiert werden und ist damit fertigen Einheits-Programmen weit überlegen. Das Compilieren erfordert allerdings einige Kenntnisse und ist für durchschnittliche Büro- oder Heim-AnwenderInnen nicht sinnvoll.

Philosophie

Die Syntax von C ist einfach, klar und streng.

C trifft keine Annahmen:
Die EntwicklerInnen müssen alle verwendeten Elemente ausdrücklich und genau deklarieren. Das gibt ihnen alle Möglichkeiten - auch jene der falschen Anwendung.
Darin unterscheidet sich C wesentlich von den meisten modernen Programmiersprachen, die keine ausdrückliche Deklaration verlangen, die Typen von Variablen nach Ermessen festlegen und bei Bedarf ungefragt umwandeln.

C ist allgemein gehalten:
Es sind keine Bestandteile enthalten, die an eine bestimmte Hardware oder an ein Betriebssystem gebunden sind.
Solche Elemente können allerdings hinzugefügt werden.
Dieses Konzept wird auch von allen anderen modernen Programmiersprachen eingehalten.

C stellt keine Ansprüche.
C-Programme laufen ohne weitere Maßnahmen auf dem jeweiligen Betriebssystem. In der Praxis wurden große Programme allerdings so entwickelt, dass sie sich auf andere Resourcen stützen, deren Installation vorausgesetzt wird.
Die neueste Entwicklung verläuft wieder genau umgekehrt: Portable Programme (z.B. für USB-Stick) enthalten selbst alle benötigten Komponenten und laufen 'wirklich' unabhängig von allen anderen installierten Komponenten.

Verbreitung

Die Programmiersprache C/C++ ist heute für alle gängigen Betriebssysteme verfügbar. Sie wird vorwiegend im professionellen Bereich eingesetzt und gilt als schwieriger zu erlernen als z.B. Javascript oder PHP.

Mit C/C++ kann man fast perfekt optimierten Code und daher besonders schnell laufende Programme erzeugen.
Das rechtfertigt die höheren Kosten der C-Entwicklung überall dort, wo Programme rasch laufen müssen oder in großen Stückzahlen verwendet werden sollen: Mindestens die kritischen Komponenten von Betriebssystemen und Standard-Programmen (z.B. für den Office- oder Grafik-Bereich) werden in C++ entwickelt.

Anwendung

Die UNIX und Linux Betriebssysteme und die meisten darauf laufenden Programme sind fast auschließlich in C/C++ programmiert. Nur einige besonders kritische Teile sind direkt in Maschinensprache (Assembler) erstellt.

Alle gängigen Linux Distributionen enthalten einen → C/C++ Compiler oder ermöglichen die Installation auf Knopfdruck.
Auf Linux ist es für fortgeschrittene AnwenderInnen üblich, Programme oder Module aus dem C Quelltext zu compilieren. Das ist selbst für erfahrene Windows-AnwenderInnen kaum glaubhaft, jedoch relativ einfach. Wirkliche Gurus compilieren auch ihr eigenes Linux System 'Nach Maß'.

Bibliotheken

C/C++ ist eine modulare Programmiersprache. Der Kern (Core) ist besonders schlank und schnell. Alle benötigten Funktionen werden in Form von Bibliotheken (Libraries) und Klassen ergänzt.
Neben einer Reihe von standardisierten Bibliotheken (ANSI, POSIX) sind unzählige Bibliotheken für jeden denkbaren Zweck erhältlich, die meisten davon kostenlos.

Der streng modulare Aufbau trägt wesentlich zur Sparsamkeit und Geschwindigkeit bei: Ein → Linker-Programm verpackt nur jene Teile der Sprache in das fertige Programm, die wirklich gebraucht werden (oder zumindest von der/dem EntwicklerIn angefordert wurden).
Häufig verwendete Bibliotheken werden ständig weiterentwickelt, was Geschwindigkeit, Leistung und Sicherheit laufend verbessert.

Linker

In größeren Projekten werden mehrere Programm-Teile getrennt in Maschinensprache übersetzt (compiliert).
Ein Linker ist ein Programm, welches derartige Teile zu einem lauffähigen Programm zusammensetzt. Oft wird diese Bezeichnung nicht getrennt verwendet, sondern in den Begriff (und in das Programm-Paket) des Compilers integriert.

Interessant ist die Fähigkeit mancher Linker, compilierte Objekte verschiedener Programmiersprachen miteinander zu verknüpfen.
Praktische Bedeutung hat z.B. die Verwendung von Fortran Programm-Bibliotheken für C-Programme erlangt.
Umgekehrt bieten moderne Programmiersprachen die Möglichkeit, einzelne kritische Teile in C/C++ zu programmieren.

Programmiersprachen

Die Compiler- und Interpreter-Programme von Programmiersprachen sind selbst ausführbare Programme und müssen programmiert werden.
Dazu wird in den meisten Fällen C/C++ verwendet.

Alle modernen Programmiersprachen sind modular aufgebaut. Die zahlreichen Module (z.B. für Perl, PHP, ...) sind oft in C/C++ programmiert. Für EntwicklerInnen gibt es Baukästen (Toolkits, Solution Developer Kits SDKs, ...), mit denen man eigene Module selbst mit C/C++ programmieren kann.

Elemente von C/C++

Selbstverständlich enthält C/C++ alle wichtigen Elemente älterer Programmiersprachen, z.B. Variable verschiedener Typen, Operatoren und Elemente zur Steuerung des Programm-Ablaufs. Darüber hinaus ist C für einige typische Elemente bekannt. Diese wurden nur zum Teil für C erfunden, jedoch in C/C++ erstmals wirklich klar und konsequent definiert. Vor allem die Begriffe Pointer, Klasse, Vererbung und Polymorphie werden häufig mit C in Verbindung gebracht.

Pointer

Ein Pointer ist eine positive ganze Zahl mit der Bedeutung einer Adresse. Der Pointer auf eine Variable gibt an, wo sich der Wert dieser Variablen befindet.
Dieses einfache Konzept war nicht neu, wurde jedoch von Kernighan & Ritchie zu einem mächtigen Werkzeug ausgebaut.
Bei einer einfachen Variablen ist es noch trivial, wie man von ihrem Wert zur Adresse (Pointer) und umgekehrt gelangt. Wenn man jedoch Pointer auf andere Pointer verwendet, Pointer auf ganze Arrays von Pointern und damit auch noch virtuos rechnet (Pointer-Arithmetik), dann kann man leicht die Übersicht verlieren.

In der Praxis hat sich herausgestellt, dass die Arbeit mit Pointern schwierig zu verstehen ist, insbesondere bei zunehmender Komplexität der Programme.
Viele Programm-Fehler haben mit falscher Anwendung von Pointern zu tun und sind darüber hinaus auch schwierig zu debuggen.
Pointer sind auch heute noch ein wichtiges Element von C (und aller modernen Programmiersprachen): Ihre Bedeutung ist jedoch geringer, da man komplexe Pointer-Anwendungen durch einfacher anwendbare Elemente ergänzt und entschärft hat.

Klasse

Eine Klasse ist ein "gekapseltes Objekt", d.h. sie enthält (als C-Programm) alle Eigenschaften und Methoden, die man zur praktischen Anwendung benötigt.

Man definiert damit klare Schnittstellen zwischen der Klasse und jenen Programmen, welche eine Klasse verwenden. Die innere Programmierung der Klasse wird vollkommen isoliert (gekapselt) und ist von außen nicht zugänglich.
Dieses Konzept macht jede Klasse portabel und allgemein verwendbar, ohne dass man sich um ihre innere Programmierung kümmern muss.

Instanzen

Man kann von jeder Klasse beliebig viele Instanzen herstellen: Wenn man z.B. über eine Klasse 'Fläche' verfügt, dann kann man in eigenen Programmen beliebig viele Flächen definieren und ihnen unterschiedliche Eigenschaften zuweisen.

Vererbung

Aus jeder Klasse kann man weitere Klassen herstellen, die alle Eigenschaften der Parent-(Eltern)-Klasse erben, und darüber hinaus eigene spezielle Eigenschaften erhalten.
Man kann z.B. aus der Klasse 'Fläche' die Klassen Kreis und Rechteck ableiten: Sie verfügen über alle Eigenschaften der Fläche und über zusätzliche, individuelle Eigenschaften wie z.B. Radius, Länge, Breite, ...
Mit diesem Konzept ist eine klare hierarchische Ordnung aller verwendeten Klassen-Objekte möglich.

Alle modernen Programmiersprachen können Klassen erzeugen und anwenden.

C/C++ Entwicklung

Compiler

Die Mindest-Ausrüstung zur Entwicklung mit C/C++ ist ein Compiler-Programm zur Übersetzung der selbst erstellten Quelltext-Anweisungen in ein ausführbares Programm.

Es gibt heute gute kostenfreie Compiler für alle gängigen Betriebssysteme.
Details zur Funktion eines Compilers, mit praktischen Beispielen

Integrierte Entwicklungs-Umgebung (IDE)

Compiler sind für wenig geübte AnwenderInnen nicht einfach zu bedienen. Zur Entwicklung verwendet man besser komfortable Programme mit grafischem User-Interface (GUI).
Ein Integrated Development Environment (IDE) ist ein bequem bedienbares Programm mit grafischen Fenstern. Es hilft, den Quelltext zu erstellen, den Compiler zu bedienen und bietet zusätzlich einige praktische Werkzeuge.
Details zu kostenfreien IDE Programmen für C/C++

C oder C++

Gelegentlich wird die Frage diskutiert, ob man mit C oder C++ programmieren soll. Das ist kein wirkliches Problem: In der professionellen Praxis wird fast ausschließlich mit C++ programmiert - oder überhaupt in einer anderen Programmiersprache.

In der Ausbildung führt kein Weg an der klassischen K&R-Version von C vorbei. Man kann nicht ernsthaft C++ programmieren, ohne C zu verstehen.

Ausgewählte Links zum Thema C/C++

Wikipedia:
Programmiersprache C,
The C Programming Language (Buch von Kernighan & Ritchie)
Programmiersprache C++,
The C++ Programming Language (Buch von Stroustrup)
C# (C Sharp)

C-Compiler (Windows)

Borland C++ Builder
Code::Blocks (inkl. MinGW)
GNU GCC-Compiler
Microsoft Visual C++
C++ Entwicklung mit Linux (Thomas Wieland)
Programmiersprache C/C++ (P. Böhme, Uni Halle/Wittenberg)
Borland C++ Builder (Thomas Wieland - Grundlagen, Profi)
cgihtml - Bibliothek für CGI-Entwicklung
cgic - OpenSource Bibliothek für CGI-Entwicklung von Boutell
Visual C# 2005 Handbuch (Andreas Kühnel / Galileo)
FHTW Berlin: Funktionen der Standard C Bibliotheken
Homepages von Brian Kernighan, Dennis Ritchie, Bjarne Stroustrup
The Development of the C Language (Dennis Ritchie, en)
XHTML CSS