Informatik :: C++ :: Einführung
Einführung
Entstehung
C++ ist eine von der ISO (Internationale Organisation für Normung, internationale Vereinigung der Standardisierungsgremien) standardisierte höhere Programmiersprache.
Sie wurde in den 1980er Jahren von Bjarne Stroustrup bei AT&T als Erweiterung der Programmiersprache C entwickelt.
C++ wurde als Mehrzwecksprache konzipiert und unterstützt mehrere Programmierparadigmen, wie die objektorientierte, generische und prozedurale Programmierung.
C++ ermöglicht sowohl die effiziente und maschinennahe Programmierung, als auch eine Programmierung auf hohem Abstraktionsniveau.
Der Name ist eine Wortschöpfung von Rick Mascitti und wurde zum ersten Mal im Dezember 1983 benutzt. Der Name kommt von der Verbindung der Vorgängersprache C und dem Inkrement-Operator "++", der den Wert einer Variable um eins erhöht.
Anwendungsgebiete
C++ wird sowohl in der Systemprogrammierung als auch in der Anwendungsprogrammierung eingesetzt.
Typische Anwendungsfelder in der Systemprogrammierung sind Betriebssysteme, eingebettete Systeme, virtuelle Maschinen, Treiber und Signalprozessoren. C++ nimmt hier oft den Platz ein, der früher ausschließlich Assemblersprachen und der Programmiersprache C vorbehalten war.
Aus der Domäne der Anwendungsprogrammierung wurde C++ mit dem Aufkommen der Sprachen Java und C# zum Teil zurückgedrängt. Bei der Anwendungsprogrammierung kommt C++ heute vor allem dort zum Zuge, wo maximale Forderungen an die Effizienz gestellt werden, um durch technische Rahmenbedingungen vorgegebene Leistungsgrenzen möglichst gut auszunutzen.
Kompatibilität mit C
Um an die hohe Verbreitung der Programmiersprache C anzuknüpfen, wurde C++ als Erweiterung von C gemäß dem damaligen Stand von 1990 (ISO/IEC 9899:1990, auch kurz C90 genannt) entworfen.
C-Compiler sind auch heute noch für praktisch jeden Prozessor verfügbar, und in C geschriebene Programme können in der Regel ohne große Anpassungen in C++ übernommen werden.
Die Kompatibilität mit C zwingt C++ aber auch zur Fortführung einiger dadurch übernommener Nachteile. Dazu zählt die teilweise schwer verständliche C-Syntax, der als überholt geltende Präprozessor sowie verschiedene von der jeweiligen Plattform abhängige Details der Sprache. Plattformabhängigkeiten erschweren die Portierung von C++-Programmen zwischen unterschiedlichen Rechnertypen, Betriebssystemen und Compilern.
Die letzten Änderungen an C fanden im Jahr 1999 statt (ISO/IEC 9899:1999, auch kurz C99 genannt), also nach der Normung von C++, sodass dort eingeflossene Änderungen nicht in C++ berücksichtigt werden konnten. C-Compiler, die den Stand der ISO-Norm von 1999 umsetzen, sind aber noch nicht sehr verbreitet. Die theoretisch dadurch entstandenen Inkompatibilitäten spielen deshalb in der Praxis bislang keine große Rolle. Um dennoch einem Auseinanderdriften der Sprachen vorzubeugen, werden die Spracherweiterungen von C bei der in Arbeit befindlichen C++-Version berücksichtigt.
Mittlerweile ist C++ selbst sehr stark verbreitet und kann einen Vorteil gegenüber C oft dann ausspielen, wenn die Größe eines Projektes die Verwendung von Assembler oder C nicht ratsam erscheinen lässt.
Sprachmerkmale im Detail
C++ basiert auf der Programmiersprache C wie in ISO/IEC 9899:1990 beschrieben. Zusätzlich zu den in C vorhandenen Möglichkeiten bietet C++ weitere Datentypen, Klassen mit Mehrfachvererbung und virtuellen Funktionen, Ausnahmebehandlung, Templates (Schablonen), Namensräume, Inline-Funktionen, Überladen von Operatoren und Funktionsnamen, Referenzen, Operatoren zur Freispeicherverwaltung und mit der C++-Standardbibliothek eine erweiterte Bibliothek.
C++ ist eine so genannte "Multiparadigmen-Sprache", die verschiedene Programmiertechniken unterstützt:
- Prozedurale Programmierung
- Modulare Programmierung
- Strukturierte Programmierung
- Programmierung mit selbstdefinierten Datentypen (abstrakte Datentypen)
- Objektorientierte Programmierung
- Generische Programmierung mittels Templates.
C++-Compiler
Die Implementierung eines C++-Compilers gilt als äußerst aufwändig.
Seit der Fertigstellung der Sprachnorm 1998 dauerte es mehrere Jahre, bis die Sprache von C++-Compilern weitestgehend unterstützt wurde.
Zu den bedeutendsten C++-Compilern gehören:
- Der g++ ist die C++-Ausprägung der GNU Compiler Collection (GCC); g++ ist quelloffen, frei verfügbar und zeichnet sich seit der Version 4.1 durch eine hohe Sprachkonformität aus.
Der g++ unterstützt besonders viele Betriebssysteme (darunter Unix, Linux, Mac OS X, Windows und AmigaOS) und Prozessorplattformen.
Derzeit dient eine Sonderanfertigung des Compilers namens ConceptGCC als Prüfmittel für verschiedene geplante C++-Spracherweiterungen. GNU C++ existiert seit 1987 und ist somit einer der ältesten C++-Compiler.
- Der in Microsoft Visual C++ enthaltene Compiler ist einer der verbreitetsten für das Betriebssystem Windows. Seit der Version 7.1 gilt er als weitestgehend sprachkonform.
- Der Comeau C++ ist derzeit der einzige Compiler, der export von Templates integriert hat und damit der einzige, der alle C++-Sprachmittel enthält.
Das so genannte „Front-End“ des Compilers, also der Teil, der die Analyse-Phase implementiert, wurde von der Firma Edison Design Group (EDG) erstellt, die sich auf die Entwicklung von Compiler-Front-Ends spezialisiert hat und deren C++-Front-End auch in vielen anderen kommerziellen C++-Compilern integriert ist.
Der Comeau-Compiler kann auch über das Internet ausprobiert werden.
- Der Intel C++ Compiler verwendet ebenfalls das erwähnte C++-Front-End von EDG und weist aus diesem Grund eine hohe Konformität mit der C++-Sprachnorm auf.
Der Intel C++ Compiler erzeugt Maschinencode für die Intel-Prozessoren unter den Betriebssystemen Windows, Linux und MacOS X.
Da die mit dem Intel C++ Compiler erzeugten Programme den Befehlssatz der Intel-Prozessoren besonders gut ausnutzen, erzeugen sie besonders effiziente Programme für Intel-Prozessoren.
- Der Borland C++ Builder ist ein im Developer Studio enthaltener C++-Compiler.
Entstehungsgeschichte
- C++ wurde von Bjarne Stroustrup ab 1979 in den AT&T Bell Laboratories entwickelt. Ausgangspunkt waren Untersuchungen des UNIX-Betriebssystemkerns in Bezug auf verteiltes Rechnen.
Auf die Idee für eine neue Programmiersprache war Stroustrup schon durch Erfahrungen mit der Programmiersprache Simula im Rahmen seiner Doktorarbeit an der Cambridge University gekommen.
Simula erschien zwar geeignet für den Einsatz in großen Software-Projekten, die Struktur der Sprache erschwerte aber die für viele praktische Anwendungen erforderliche Erzeugung hocheffizienter Programme. Demgegenüber ließen sich effiziente Programme zwar mit der Sprache BCPL schreiben, für große Projekte war BCPL aber wiederum ungeeignet.
- Mit den Erfahrungen aus seiner Doktorarbeit erweiterte Stroustrup nun die Programmiersprache C um ein Klassenkonzept, für das die Sprache Simula das primäre Vorbild war.
- Die Wahl fiel auf die Programmiersprache C, eine Mehrzwecksprache, die schnellen Code produzierte und einfach auf andere Plattformen zu portieren war.
Als dem Betriebssystem UNIX beiliegende Sprache hatte C außerdem eine nicht unerhebliche Verbreitung.
Zunächst fügte er der Sprache Klassen (mit Datenkapselung) hinzu, dann abgeleitete Klassen, ein strengeres Typsystem, Inline-Funktionen und Standard-Argumente.
- Während Stroustrup "C with Classes" entwickelte (woraus später C++ wurde), schrieb er auch cfront, einen Compiler, der aus C with Classes zunächst C-Code als Zwischenresultat erzeugte. Die erste kommerzielle Version von cfront erschien im Oktober 1985.
- 1983 wurde C with Classes in C++ umbenannt. Erweiterungen darin waren: virtuelle Funktionen, Überladen von Funktionsnamen und Operatoren, Referenzen, Konstanten, änderbare Freispeicherverwaltung und eine verbesserte Typüberprüfung. Die Möglichkeit von Kommentaren, die an das Zeilenende gebunden sind, wurde wieder aus BCPL übernommen.
- 1985 erschien die erste Version von C++, die eine wichtige Referenzversion darstellte, da die Sprache damals noch nicht standardisiert war.
- 1989 erschien die Version 2.0 von C++. Neu darin waren Mehrfachvererbung, abstrakte Klassen, statische Elementfunktionen, konstante Elementfunktionen und die Erweiterung des Schutzmodells um protected.
- 1990 erschien das Buch The Annotated C++ Reference Manual, das als Grundlage für den darauffolgenden Standardisierungsprozess diente.
- Relativ spät wurden der Sprache Templates, Ausnahmen, Namensräume, neuartige Typumwandlungen und boolesche Typen hinzugefügt.
- Im Zuge der Weiterentwicklung der Sprache C++ entstand auch eine gegenüber C erweiterte Standardbibliothek. Erste Ergänzung war die Stream-I/O-Bibliothek, die Ersatz für traditionelle C-Funktionen wie zum Beispiel printf() und scanf() bietet. Eine der wesentlichen Erweiterungen der Standardbibliothek kam später durch die Integration großer Teile der bei Hewlett-Packard entwickelten Standard Template Library (STL) hinzu.
- Nach jahrelanger Arbeit wurde schließlich 1998 die endgültige Fassung der Sprache C++ (ISO/IEC 14882:1998) genormt.
- 2003 wurde ISO/IEC 14882:2003 verabschiedet, eine Nachbesserung der Norm von 1998.
- Die nächste größere Überarbeitung der Sprache C++ erscheint voraussichtlich im Jahr 2009.
- Die vorhandenen Performance-Probleme der Sprache C++, die Rechenzeit und Speicherplatz betreffen, werden auf hohem Niveau zusammen mit Lösungen im Technical Report ISO/IEC TR 18015:2006 diskutiert. Das Dokument ist zum Download von ISO freigegeben.