„C++“ – Versionsunterschied
[ungesichtete Version] | [ungesichtete Version] |
Poldi (Diskussion | Beiträge) Keine Bearbeitungszusammenfassung |
Keine Bearbeitungszusammenfassung |
||
Zeile 1: | Zeile 1: | ||
'''C++''' ist eine der am weitesten verbreiteten und industriell bedeutendsten [[Programmiersprache]]n. Sie ist als Mehrzwecksprache konzipiert und unterstützt insbesondere [[Effizienz|effiziente]] und maschinennahe Programmierung, [[abstrakter Datentyp|Datenabstraktion]] sowie [[objektorientierte Programmierung|objektorientierte]] und [[generische Programmierung]]. |
'''C++''' ist eine der am weitesten verbreiteten und industriell bedeutendsten [[Programmiersprache]]n. Sie ist als Mehrzwecksprache konzipiert und unterstützt insbesondere [[Effizienz|effiziente]] und maschinennahe Programmierung, [[abstrakter Datentyp|Datenabstraktion]] sowie [[objektorientierte Programmierung|objektorientierte]] und [[generische Programmierung]]. |
||
⚫ | C++ basiert auf der [[C (Programmiersprache)|Programmiersprache C]] wie in [[International Organization for Standardization|ISO]]/IEC 9899:1990 beschrieben. Zusätzlich zu den in [[C (Programmiersprache)|C]] vorhandenen Möglichkeiten bietet C++ weitere [[Datentyp]]en, [[objektorientierte Programmierung#Klassen|Klassen]] mit [[Vererbung (objektorientierte Programmierung)|Vererbung]] und [[virtuelle Funktion|virtuellen Funktionen]], [[Ausnahme (EDV)|Ausnahmebehandlung]], [[Template (Programmierung)|Templates (Schablonen)]], [[Namensraum|Namensräume]], [[Inline-Ersetzung|Inline-Funktionen]], [[Überladen]] von [[Operator]]en und Funktionsnamen, [[Referenz (Programmierung)|Referenzen]], Operatoren zur [[Freispeicher (Programmierung)|Freispeicherverwaltung]] und mit der [[C++-Standardbibliothek]] eine erweiterte [[Bibliothek (Programmierung)|Bibliothek]]. |
||
== Eigenschaften == |
== Eigenschaften == |
||
Zeile 34: | Zeile 32: | ||
Die Wahl fiel auf die Programmiersprache [[C (Programmiersprache)|C]], weil C eine Mehrzwecksprache war, schnellen Code produzierte und einfach auf andere Plattformen zu [[Portierung|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. |
Die Wahl fiel auf die Programmiersprache [[C (Programmiersprache)|C]], weil C eine Mehrzwecksprache war, schnellen Code produzierte und einfach auf andere Plattformen zu [[Portierung|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 mit Klassen''“ („''C with Classes''“) entwickelte (woraus später C++ wurde), schrieb er auch |
Während Stroustrup „''C mit Klassen''“ („''C with Classes''“) entwickelte (woraus später C++ wurde), schrieb er auch ''cfront'', einen Compiler, der aus ''C mit Klassen'' zunächst C-Code als Zwischenresultat erzeugte. Die erste kommerzielle Version von ''cfront'' erschien im Oktober 1985. |
||
1982 wurde ''C mit Klassen'' 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 (<code>//</code>). |
1982 wurde ''C mit Klassen'' 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 (<code>//</code>). |
||
Zeile 50: | Zeile 48: | ||
== Der Name „C++“ == |
== Der Name „C++“ == |
||
Der Name ist eine Wortschöpfung von Rick Mascitti und wurde zum ersten Mal im Dezember 1983 benutzt. Während ihrer Entstehung wurde die Sprache zuerst „C with Classes“ genannt. Der endgültige Name kommt vom [[Inkrement und Dekrement|Inkrement]]-Operator „++“, der den Wert einer Variablen um eins erhöht. |
Der Name ist eine Wortschöpfung von Rick Mascitti und wurde zum ersten Mal im Dezember 1983 benutzt. Während ihrer Entstehung wurde die Sprache zuerst „C with Classes“ genannt. Der endgültige Name kommt vom [[Inkrement und Dekrement|Inkrement]]-Operator „++“, der den Wert einer Variablen um eins erhöht. |
||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
== Hallo-Welt-Programm in C++ == |
== Hallo-Welt-Programm in C++ == |
||
Zeile 76: | Zeile 60: | ||
<!-- Der Rückgabewert ist (im Unterschied zu C89) implizit vorhanden, fehlt also nicht! --> |
<!-- Der Rückgabewert ist (im Unterschied zu C89) implizit vorhanden, fehlt also nicht! --> |
||
} |
} |
||
''Erläuterungen:'' Bei <tt>main</tt> handelt es sich um eine [[Funktion (Programmierung)|Funktion]], genauer gesagt ist es die Hauptfunktion des gesamten Programms. Die Funktion <tt>main</tt> ist in jedem C++-Programm vorhanden und wird nach dem Start des Programms aufgerufen. Die C++-ISO-Norm schreibt vor, dass das Ergebnis von <tt>main</tt> vom Typ <tt>int</tt> sein muss. Ein Programm, bei dem das Ergebnis von <tt>main</tt> nicht vom Typ <tt>int</tt> ist, ist kein gültiges Programm im Sinne der C++-ISO-Norm (ISO-14882). Die Funktion <tt>main</tt> ist die einzige Funktion, die – obwohl sie einen Wert zurückgibt – nicht die Anweisung „<tt>return</tt>“ benötigt. Ohne die explizite Anweisung <tt>return</tt> gibt <tt>main</tt> den Wert 0 zurück. |
|||
⚫ | |||
=== Erläuterungen === |
|||
⚫ | C++ basiert auf der [[C (Programmiersprache)|Programmiersprache C]] wie in [[International Organization for Standardization|ISO]]/IEC 9899:1990 beschrieben. Zusätzlich zu den in [[C (Programmiersprache)|C]] vorhandenen Möglichkeiten bietet C++ weitere [[Datentyp]]en, [[objektorientierte Programmierung#Klassen|Klassen]] mit [[Vererbung (objektorientierte Programmierung)|Vererbung]] und [[virtuelle Funktion|virtuellen Funktionen]], [[Ausnahme (EDV)|Ausnahmebehandlung]], [[Template (Programmierung)|Templates (Schablonen)]], [[Namensraum|Namensräume]], [[Inline-Ersetzung|Inline-Funktionen]], [[Überladen]] von [[Operator]]en und Funktionsnamen, [[Referenz (Programmierung)|Referenzen]], Operatoren zur [[Freispeicher (Programmierung)|Freispeicherverwaltung]] und mit der [[C++-Standardbibliothek]] eine erweiterte [[Bibliothek (Programmierung)|Bibliothek]]. |
||
Bei <tt>main</tt> handelt es sich um eine [[Funktion (Programmierung)|Funktion]], genauer gesagt ist es die Hauptfunktion des gesamten Programms. Die Funktion <tt>main</tt> ist in jedem C++-Programm vorhanden und wird nach dem Start des Programms aufgerufen. |
|||
⚫ | |||
Die C++-ISO-Norm schreibt vor, dass das Ergebnis von <tt>main</tt> vom Typ <tt>int</tt> sein muss. Ein Programm, bei dem das Ergebnis von <tt>main</tt> nicht vom Typ <tt>int</tt> ist, ist kein gültiges Programm im Sinne der C++-ISO-Norm (ISO-14882). |
|||
⚫ | |||
Die Funktion <tt>main</tt> ist die einzige Funktion, die – obwohl sie einen Wert zurückgibt – nicht die Anweisung „<tt>return</tt>“ benötigt. Ohne die explizite Anweisung <tt>return</tt> gibt <tt>main</tt> den Wert 0 zurück. |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
== Vergleich mit anderen Sprachen == |
== Vergleich mit anderen Sprachen == |
||
Zeile 101: | Zeile 95: | ||
Im April 2006 wurde der erste technische Report (''TR1'') vom C++-Komitee verabschiedet. Dabei handelt es sich um die erste Erweiterung zur Standardbibliothek. Der [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf TR1] beschreibt viel genutzte C++-Bibliotheken, die nun offiziell für ISO C++ als Bibliothekserweiterung verfügbar gemacht werden können. Enthalten sind im TR1 z.B. [[regulärer Ausdruck|reguläre Ausdrücke]], verschiedene [[intelligenter Zeiger|intelligente Zeiger]], so genannte ''Hash-Container'', eine Zufallszahlenbibliothek, usw. Die meisten Erweiterungen stammen aus der [[Boost|Boost-Bibliothek]], woraus sie mit minimalen Änderungen übernommen wurden. |
Im April 2006 wurde der erste technische Report (''TR1'') vom C++-Komitee verabschiedet. Dabei handelt es sich um die erste Erweiterung zur Standardbibliothek. Der [http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2005/n1836.pdf TR1] beschreibt viel genutzte C++-Bibliotheken, die nun offiziell für ISO C++ als Bibliothekserweiterung verfügbar gemacht werden können. Enthalten sind im TR1 z.B. [[regulärer Ausdruck|reguläre Ausdrücke]], verschiedene [[intelligenter Zeiger|intelligente Zeiger]], so genannte ''Hash-Container'', eine Zufallszahlenbibliothek, usw. Die meisten Erweiterungen stammen aus der [[Boost|Boost-Bibliothek]], woraus sie mit minimalen Änderungen übernommen wurden. |
||
<ref>[http://www.artima.com/cppsource/cpp0x.html Bjarne Stroustrup: ''A Brief Look at C++0x'' - 2. Januar 2006]</ref> |
|||
== C++-Compiler == |
== 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 |
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. Schon allein die Umsetzung des Sprachmittels <tt>export</tt>, das zur Unterstützung von Templates dient, wird mit etwa 2 bis 3 Mannjahren veranschlagt, ein Zeitraum, in dem bei anderen Programmiersprachen komplette Compiler entstehen. Bis heute gab es erst zwei Compiler, die über das Sprachmittel <tt>export</tt> verfügt haben. |
||
C++ wurde in der Phase, in der die Sprache die größte Entwicklung erlebte, bereits intensiv eingesetzt. Dies sorgte dafür, dass viele Entwickler nicht oder nur unzureichend mit neueren Eigenschaften der Sprache vertraut waren oder diese auf Grund von unvollständigen Compilern nicht einsetzen konnten. Daher sind viele Projekte, die in C++ entwickelt wurden, auch heute nicht auf dem aktuellen Stand der C++-Programmierung oder sogar inkompatibel zur aktuellen C++-Norm. |
C++ wurde in der Phase, in der die Sprache die größte Entwicklung erlebte, bereits intensiv eingesetzt. Dies sorgte dafür, dass viele Entwickler nicht oder nur unzureichend mit neueren Eigenschaften der Sprache vertraut waren oder diese auf Grund von unvollständigen Compilern nicht einsetzen konnten. Daher sind viele Projekte, die in C++ entwickelt wurden, auch heute nicht auf dem aktuellen Stand der C++-Programmierung oder sogar inkompatibel zur aktuellen C++-Norm. |
||
Zeile 206: | Zeile 200: | ||
[[Kategorie:Programmiersprache C++| ]] <!-- "| " sorgt dafür, dass der Artikel als Oberartikel der Kategorie erkannt wird. Bitte _nicht_ löschen --> |
[[Kategorie:Programmiersprache C++| ]] <!-- "| " sorgt dafür, dass der Artikel als Oberartikel der Kategorie erkannt wird. Bitte _nicht_ löschen --> |
||
=== Quellen === |
|||
<references/> |
|||
[[af:C++]] |
[[af:C++]] |
Version vom 4. Januar 2007, 20:27 Uhr
C++ ist eine der am weitesten verbreiteten und industriell bedeutendsten Programmiersprachen. Sie ist als Mehrzwecksprache konzipiert und unterstützt insbesondere effiziente und maschinennahe Programmierung, Datenabstraktion sowie objektorientierte und generische Programmierung.
Eigenschaften
Sprachdesign
Die Sprache C++ zeichnet sich dadurch aus, dass sie, anstatt für typische Problemstellungen Einzellösungen anzubieten, verallgemeinerte Mechanismen favorisiert. Ein Schwerpunkt liegt dabei auf der Unterstützung der Sprachmittel zur Entwicklung von Bibliotheken. Ein Beispiel für die hohe Flexibilität, die dadurch erreicht wird, ist die anpassbare Speicherverwaltung, in die sich etwa nahtlos eine automatische Speicherbereinigung integrieren lässt.
Eine der Stärken von C++ ist auch die Kombinierbarkeit von effizienter, maschinennaher Programmierung mit mächtigen Sprachmitteln, die einfache bis komplexe Implementierungsdetails zusammenfassen und weitgehend hinter abstrakten Befehlsfolgen verbergen. Dabei kommt vor allem die Template-Metaprogrammierung zum Zuge, eine Technik, die eine nahezu kompromisslose Verbindung von Effizienz und Abstraktion erlaubt.
Kompatibilität mit C
C++ ist eine Erweiterung der Programmiersprache C gemäß dem Stand von 1990 (ISO/IEC 9899:1990, auch kurz C90 genannt). C++ enthält C nach dem Stand C90 fast vollständig. Die Kompatibilität mit C war eines der Hauptdesignziele bei der Entwicklung der Programmiersprache C++. Grund dafür war die große Verbreitung von C. C-Compiler sind auch heute noch für praktisch jeden Prozessor verfügbar. Deswegen gilt die Kompatibilität mit C immer noch als eine der wichtigsten Eigenschaften von C++.
Seit ihrer Entstehung hat C++ stark von der Kompatibilität mit der Programmiersprache C profitiert, da in C geschriebene Programme in der Regel ohne große Anpassungen übernommen werden können. 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 lassen.
Die Kompatibilität mit C zwingt C++ aber auch zur Fortführung einiger dadurch übernommener Nachteile. Dazu zählt etwa die teilweise schwer verständlichen C-Syntax, oder der als überholt geltende Präprozessor. Die Kompatibilität mit C hat auch zur Folge, dass einige Details der Sprache Compiler-spezifisch sind, die es andernfalls aber nicht sein müssten. So ist beispielsweise die Auswertungsreihenfolge von Teilausdrücken je nach Compiler und Plattform unterschiedlich. Compiler-spezifische Spracheigenschaften erschweren die Portierung von C++-Programmen zwischen Rechnertypen, Betriebssystemen und unterschiedlichen 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.
Anwendungsfelder
Durch die genannten Eigenschaften eignet sich C++ insbesondere für die Systemprogrammierung. Auch für die Anwendungsprogrammierung bringt C++ gute Voraussetzungen mit, wurde aber mit dem Aufkommen der Sprachen Java und C# zum Teil aus dieser Domäne zurückgedrängt.
Bei der Anwendungsprogrammierung kommt C++ heute vor allem dort zum Zuge, wo maximale Forderungen an die Effizienz gestellt werden, sodass durch technische Gegebenheiten bestimmte Leistungsgrenzen möglichst gut ausgenutzt werden können.
Weitere typische Anwendungsfelder sind Signalprozessoren, Treiber und eingebettete Systeme. C++ nimmt hier oft den Platz ein, der früher ausschließlich Assembler-Sprachen und der Programmiersprache C vorbehalten war.
Einschränkend wirken sich an manchen Stellen die verhältnismäßig langen Einarbeitungszeiten aus. Aufgrund des breiten Leistungspektrums und der vielfältigen Gestaltungsmöglichkeiten wird außerdem die Verwendung von Programmierrichtlinien aus Gründen der Wartbarkeit und Fehleridentifizierung mehr als in anderen Sprachen angeraten.
Entstehungsgeschichte
C++ wurde von Bjarne Stroustrup ab 1979 bei AT&T entwickelt. Die Idee für eine neue Programmiersprache entstand aus den Erfahrungen mit der Programmiersprache Simula im Rahmen der Promotion von B. Stroustrup. 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. Effiziente Programme ließen sich zwar mit der Sprache BCPL schreiben, für große Projekte war BCPL aber wiederum ungeeignet.
Als Stroustrup in den Bell-Laboratorien zu arbeiten begann, sah er sich mit dem Problem konfrontiert, den UNIX-Betriebssystemkern im Hinblick auf verteilte Programmierung analysieren zu müssen. Mit den Erfahrungen aus seiner Promotion erweiterte er die Programmiersprache C um ein Klassenkonzept, für das die Sprache Simula-67 das primäre Vorbild war.
Die Wahl fiel auf die Programmiersprache C, weil C eine Mehrzwecksprache war, 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 mit Klassen“ („C with Classes“) entwickelte (woraus später C++ wurde), schrieb er auch cfront, einen Compiler, der aus C mit Klassen zunächst C-Code als Zwischenresultat erzeugte. Die erste kommerzielle Version von cfront erschien im Oktober 1985.
1982 wurde C mit Klassen 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 von der ISO die endgültige Fassung der Sprache C++ (ISO/IEC 14882:1998) genormt.
2003 wurde die erste überarbeitete Version von ISO/IEC 14882:1998 verabschiedet (ISO/IEC 14882:2003), eine Nachbesserung der Norm ISO/IEC 14882:1998. Die nächste Version der Sprache C++ erscheint voraussichtlich noch in dieser Dekade. (s. in der Entwicklung befindliche Version)
Der Name „C++“
Der Name ist eine Wortschöpfung von Rick Mascitti und wurde zum ersten Mal im Dezember 1983 benutzt. Während ihrer Entstehung wurde die Sprache zuerst „C with Classes“ genannt. Der endgültige Name kommt vom Inkrement-Operator „++“, der den Wert einer Variablen um eins erhöht.
Hallo-Welt-Programm in C++
Der folgende Quelltext stellt ein einfaches C++-Programm dar, das die Meldung „Hallo Welt!“ auf dem Standardausgabemedium ausgibt:
#include <iostream> int main() { std::cout << "Hallo Welt!" << std::endl; }
Erläuterungen: Bei main handelt es sich um eine Funktion, genauer gesagt ist es die Hauptfunktion des gesamten Programms. Die Funktion main ist in jedem C++-Programm vorhanden und wird nach dem Start des Programms aufgerufen. Die C++-ISO-Norm schreibt vor, dass das Ergebnis von main vom Typ int sein muss. Ein Programm, bei dem das Ergebnis von main nicht vom Typ int ist, ist kein gültiges Programm im Sinne der C++-ISO-Norm (ISO-14882). Die Funktion main ist die einzige Funktion, die – obwohl sie einen Wert zurückgibt – nicht die Anweisung „return“ benötigt. Ohne die explizite Anweisung return gibt main den Wert 0 zurück.
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 Vererbung 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++ unterstützt die folgenden Programmiertechniken:
- Prozedurale Programmierung
- Modulare Programmierung
- Strukturierte Programmierung
- Programmierung mit selbstdefinierten Datentypen (abstrakte Datentypen)
- Objektorientierte Programmierung (siehe auch Polymorphie (Vielgestaltigkeit))
- Generische Programmierung mittels Templates.
C++ ist somit eine so genannte „Multiparadigmen-Sprache“, die dem Programmierer sehr viele Freiheiten lässt.
Siehe auch: Programmierparadigma, Entwurfsmuster, RAII, Metaprogrammierung
Vergleich mit anderen Sprachen
C++ war nicht der einzige Ansatz, die Programmiersprache C um Eigenschaften zu erweitern, die das objektorientierte Programmieren vereinfachen. In den 1980er Jahren entstand die Programmiersprache Objective-C, die sich aber im Gegensatz zu C++ an Smalltalk und nicht an Simula orientierte. Die Syntax von Objective-C unterscheidet sich unter anderem wegen der Smalltalk-Wurzeln stark von C++. Objective-C ist weniger weit verbreitet als C++. Bekannteste Einsatzgebiete von Objective-C sind in OpenStep und Mac OS X.
Die Programmiersprachen Java und C# haben eine ähnliche, ebenfalls an C angelehnte Syntax wie C++, sind auch objektorientiert und unterstützen Typparameter, weshalb ein Vergleich mit ihnen besonders naheliegend ist.
Siehe auch: Simula, Smalltalk, Vergleich objektorientierter Programmiersprachen
Weiterentwicklung der Programmiersprache C++
C++ deckt einige typische Problemfelder der Programmierung noch nicht ausreichend ab, zum Beispiel die Unterstützung von Threads, deren Integration in C++, insbesondere für die Verwendung in Mehrprozessorumgebungen, eine Überarbeitung der Sprachdefinition erforderlich macht. Darüber hinaus fehlen Standard-Bibliotheken für TCP/IP und Dateisystem-Verzeichnisse.
C++0x (manchmal auch C++200x) ist eine inoffizielle Abkürzung für die in der Entwicklung befindliche Version der Programmiersprache C++, die durch die Ziffernfolge eine grobe Einschätzung des möglichen Erscheinungstermins andeuten soll. Im November 2006 wurde der Zieltermin für die Fertigstellung auf das Jahr 2009 festgelegt und die Abkürzung C++09 dafür eingeführt.
Im April 2006 wurde der erste technische Report (TR1) vom C++-Komitee verabschiedet. Dabei handelt es sich um die erste Erweiterung zur Standardbibliothek. Der TR1 beschreibt viel genutzte C++-Bibliotheken, die nun offiziell für ISO C++ als Bibliothekserweiterung verfügbar gemacht werden können. Enthalten sind im TR1 z.B. reguläre Ausdrücke, verschiedene intelligente Zeiger, so genannte Hash-Container, eine Zufallszahlenbibliothek, usw. Die meisten Erweiterungen stammen aus der Boost-Bibliothek, woraus sie mit minimalen Änderungen übernommen wurden.
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. Schon allein die Umsetzung des Sprachmittels export, das zur Unterstützung von Templates dient, wird mit etwa 2 bis 3 Mannjahren veranschlagt, ein Zeitraum, in dem bei anderen Programmiersprachen komplette Compiler entstehen. Bis heute gab es erst zwei Compiler, die über das Sprachmittel export verfügt haben.
C++ wurde in der Phase, in der die Sprache die größte Entwicklung erlebte, bereits intensiv eingesetzt. Dies sorgte dafür, dass viele Entwickler nicht oder nur unzureichend mit neueren Eigenschaften der Sprache vertraut waren oder diese auf Grund von unvollständigen Compilern nicht einsetzen konnten. Daher sind viele Projekte, die in C++ entwickelt wurden, auch heute nicht auf dem aktuellen Stand der C++-Programmierung oder sogar inkompatibel zur aktuellen C++-Norm.
Auch der Stand vieler Lehrbücher und Lehrveranstaltungen ist veraltet. Da sich einige Compiler, wie der GCC, der C++-Sprachdefinition immer mehr annähern, stimmen Lehrinhalte oft nicht mit der Realität existierender Compiler überein.
Bedeutende C++-Compiler
Compiler | Kommentar | Mit spezieller IDE | Plattform |
---|---|---|---|
Comeau's C++ Compiler | Gilt als einziger Compiler, der C++ vollständig umsetzt; unterstützt zum Beispiel auch export von Templates; ist jedoch mehr ein Frontend-Compiler; proprietär (kann über das Internet ausprobiert werden) | Nein | Windows, Linux, Solaris/SPARC |
g++ | Bestandteil der GCC; setzt ab Version 3.4 die Sprache C++ nahezu vollständig um; Freie Software | Nein | Unix, Linux, Mac OS X, Windows (dort auch als MinGW), AmigaOS |
MSVC | Teil von Microsoft Visual C++, der am weitesten verbreiteten IDE unter Windows; setzt ab der Version 7.1 die Sprache C++ nahezu vollständig um; proprietär; kostenlos in der Microsoft Visual C++ Express Edition verfügbar. | Ja | Windows |
Intel C++ Compiler | Setzt C++ nahezu vollständig um; erzeugt hocheffizienten Code für Intel-Prozessoren; proprietär | Nein | Windows, Linux, MacOS X |
Open Watcom | Auch Unterstützung älterer Plattformen, bisher noch ohne vollständige C++-Standardbibliothek; Open Source | Ja | DOS, Windows, OS/2, Netware (Linux-Unterstützung in Arbeit) |
Borland C++ Builder | proprietär (eine ältere Version ist kostenlos ohne IDE verfügbar) | Ja | Windows, Linux (Kylix) |
Turbo C++ | Kostenloses Basis-Paket aus dem kostenpflichtigen Turbo C++ Professional. | Ja | Windows |
Sun Studio | kommerzielle C-, C++- und Fortran 95-Compilersuite | Nein | Sun Solaris, Linux |
IBM XL C/C++ | kommerzielle C- und C++-Compiler von IBM | Nein | AIX, z/VM, Linux |
Für Kommandozeilen-Compiler, die keine spezielle integrierte Entwicklungsumgebung mitbringen, existiert eine große Zahl von unabhängigen Werkzeugen, die die Entwicklung sehr erleichtern. Eine Liste derer findet man im selbigen Artikel.
Siehe auch: Compiler, Visuelle Programmierumgebung
Siehe auch
- C++-Standardbibliothek
- Templates (Schablonen)
- C++-Metaprogrammierung
- Boost
- C++-Glossar
- Ressourcenbelegung ist Initialisierung (RAII)
- Escape-Sequenz
- C++/CLI.
- Programmiersprache C
- Embedded C++, eine Variante der Sprache C++ für eingebettete Systeme.
Literatur
- Bjarne Stroustrup: Die C++-Programmiersprache, Addison-Wesley, ISBN 3-8273-1660-X, das Standardwerk zu C++, Grundkenntnisse in C von Vorteil.
- Andrew Koenig, Barbara E. Moo: Intensivkurs C++, Pearson Studium, ISBN 3-8273-7029-9, Anfängerbuch, ein gewisses Grundverständnis der Programmierung ist von Vorteil.
- Scott Meyers: Effektiv C++ Programmieren – 55 Möglichkeiten, Ihre Programme und Entwürfe zu verbessern, Addison-Wesley, ISBN 3-8273-2297-9, zur Vertiefung bereits vorhandener C++-Kenntnisse.
- Scott Meyers: Mehr Effektiv C++ programmieren – 35 neue Wege zur Verbesserung ihrer Programme und Entwürfe, Addison-Wesley, ISBN 3-8273-1275-2, Vertiefung vorhandener C++-Kenntnisse.
- Herb Sutter: Exceptional C++, ISBN 3-8273-1711-8, Vertiefung vorhandener C++-Kenntnisse.
- Andrei Alexandrescu: Modernes C++ Design – Generische Programmierung und Entwurfsmuster angewendet, ISBN 3-8266-1347-3, ein Standardwerk zur C++-Metaprogrammierung, setzt ein tiefes Verständnis von C++ voraus.
- Bruce Eckel: Thinking in C++, Volume 1: Introduction to Standard C++, Prentice Hall, 2000, ISBN 0139798099, auch als kostenloses online-Buch verfügbar
- Bruce Eckel: Thinking in C++, Vol. 2: Practical Programming, Prentice Hall, 2003, ISBN 0130353132, auch als kostenloses online-Buch verfügbar, sehr gute Beispiele als Quelltext
Weblinks
- Linksammlung zu vielen C++ - Themen
- Oft gestellte Fragen und Antworten, englisch
- Webauftritt des C++-Standardisierungskomitees, englisch
- C++-Diskussionsgruppe, deutsch
- C++-Online-Referenz, englisch
- ACCU, internationale Interessengemeinschaft für C und C++
- Ian Joyner: „C++??“ – Kritik an C++