C gegen C ++

Dies ist ein objektiver Vergleich der Anwendungen, Verwendung und Sprachmerkmale von C und C ++ . Die Ursprünge und der Entwicklungsverlauf der beiden Programmiersprachen werden ebenfalls erörtert.

Vergleichstabelle

C gegen C ++ Vergleichstabelle
C. C ++
Entworfen vonDennis RitchieBjarne Stroustrup
MüllabfuhrHandbuch; ermöglicht eine bessere Speicherverwaltung.In der C ++ - Standardbibliothek (STD) ist kein GC verfügbar. STD bietet jedoch effiziente und deterministische Möglichkeiten zum Verwalten von Ressourcen wie Objektbesitz und Referenzzählung.
Beeinflusst vonB (BCPL, CPL), ALGOL 68, MontageC, Simula, Ada 83, ALGOL 68, CLU, ML
Erschien in19721985
KlassenVerwendet stattdessen Strukturen und bietet somit mehr Freiheit bei der Verwendung interner DesignelementeKlasse und Struktur
OOP (Objektorientierte Programmierung)Nicht eingebaut; Freiheit, Strukturen so einzurichten, dass sie sich wie Objekte verhalten. Fehlt die Möglichkeit, die Kapselung zu deklarieren.Eingebaut; Größe und Speicherlayout von Objekten sind deterministisch. Virtuelle Funktionsaufrufe können ohne vtable über CRTP erfolgen.
Wichtige ImplementierungenGCC, MSVC, Borland C, Watcom C.GNU-Compiler-Sammlung, Microsoft Visual C ++, Borland C ++ Builder, Intel C ++ - Compiler, LLVM / Clang
SchreibdisziplinStatisch, schwachStatisch, stark, unsicher, nominativ
Kommentarbegrenzer blockieren/* und *//* und */
Anweisungsabschlusszeichen;;;;
Trennzeichen für Inline-Kommentare// //// //
Beeinflusstawk, csh, C ++, C #, Ziel-C, BitC, D, gleichzeitiges C, Java, JavaScript, Limbo, Perl, PHPAda 95, C #, Java, PHP, D, Aikido
Übliche Dateinamenerweiterungen.c.cc, .cpp, .cxx, .h, .hh, .hpp
ParadigmenImperative (prozedurale) SystemimplementierungsspracheMultiparadigma, objektorientiert, generisch, prozedural, funktional, meta
Arrays mit dynamischer GrößeNeinNein
PlattformenFast alles auf dem Planeten; erfordert eine NeukompilierungFast alles, einschließlich betriebssystembasierter und nicht betriebssystembasierter Plattformen
GeschwindigkeitC-Anwendungen lassen sich schneller kompilieren und ausführen als C ++ - Anwendungen+ -5% im Vergleich zu C, wenn Sie wissen, wie man C ++ gut nutzt. Die Leistung von C ++ - und C-Programmen kann häufig gleich sein, da Compiler für beide Sprachen ausgereift sind.
AusführungsablaufOben nach untenOben nach unten
Programmier-Include#umfassen#umfassen
Programmier-String-TypKein nativer String-Typ; oft als Zeichenfolge deklariertArray, std :: string
Programmierungseingabe / -ausgabescanf für die Eingabe, printf für die Ausgabeiostream, fstream (std :: cin, std :: cout)
CodeMit einem Compiler wie bcc zu nativen ausführbaren Binärdateien kompiliert.Kompiliert zu nativen ausführbaren Binärdateien
SprachtypVerfahrensorientierte SpracheObjektorientierte Sprache mit mehreren Paradigmen
Entwickelt vonDennis Ritchie & Bell LabsBjarne Stroustrup
ObjektorientiertenNicht nativJa
Generische ProgrammierungNeinJa
VerfahrensprogrammierungJaJa
Funktionale ProgrammierungJaTeilweise
MetaprogrammierungNeinJa
BetrachtungNeinNein
Mehrdimensionale Arrays werden unterstütztJaJa
PlattformJeder, der einen Compiler hatJeder, der einen Compiler hat

Ursprünge von C und C ++

Dennis Ritchie von den Bell Labs entwarf 1972 die Allzweck-Computerprogrammiersprache C für die Verwendung mit UNIX, einem damaligen Betriebssystem. C wird hauptsächlich für die Programmierung von Systemsoftware verwendet, ist aber auch sehr nützlich für die Erstellung allgemeiner Anwendungssoftware. Einige der zur Beschreibung von C verwendeten Adjektive sind blockstrukturierte, imperative und prozedurale Sprache.

C ++ (ursprünglich "C mit Klassen" genannt und in Computerkreisen immer noch als Überbau von C bekannt) wurde 1983 von Bjarne Stroustrup in den Bell Labs als Erweiterung von C entwickelt. Stroustrup begann 1979 mit dem Hinzufügen von Klassen, virtuellen Funktionen, Überladen von Operatoren, Mehrfachvererbung, Vorlagen, Ausnahmebehandlung usw. Der Programmiersprachenstandard C ++ wurde 1998 als ISO / IEC 14882: 1998 ratifiziert, und die aktuelle Version ist die Version 2003, ISO / IEC 14882: 2003, die die korrigierte Version von C ++ 1998 enthält. Der 2005 veröffentlichte "Library Technical Report 1" enthält Einzelheiten zu Erweiterungen der Standardbibliothek, ohne Teil der Standardversion zu sein. Eine neue Version des Standards (informell bekannt als C ++ 0x) ist in der Entwicklung. C ++ ist seit 1990 eine sehr erfolgreiche kommerzielle Programmiersprache. Obwohl C ++ lizenzfrei ist, ist seine Dokumentation nicht frei verfügbar.

Verwendung von C vs. C ++

C erwies sich aufgrund seiner Stärken wie eines einfachen Compilers, geringerer Zugriffsmöglichkeiten auf den Speicher, geringerer Laufzeitunterstützung und einer effizienten Konstruktionssprache, die mit den Hardwareanweisungen synchronisiert war, als sehr nützlich beim Ausführen von Anwendungen, die in Assemblersprache codiert sind. Ein weiterer Vorteil ist, dass es sehr portabel ist (kompatibel mit einer Vielzahl von Betriebssystemen und Plattformen) und nur sehr wenige Änderungen am Quellcode erforderlich sind. Somit hat es Remote-Betrieb und Unabhängigkeit von der Hardware ermöglicht. C entspricht auch einer Vielzahl von Standards, sodass es mit allem funktioniert.

C ++ ist als Mittelsprache bekannt. Aufgrund der Tatsache, dass C ++ sowohl High-Level- als auch Low-Level-Sprachfunktionen umfasst. Einige der Adjektive, die zur Beschreibung von C ++ verwendet werden, sind statisch typisierte Freiform-, Multi-Paradigmen- und unterstützende prozedurale Programmierung.

Während der Programmierung für seine Doktorarbeit stellte Stroustrup fest, dass die Simula-Sprache über Funktionen auf hohem Niveau verfügt, die für die Entwicklung großer Software hilfreich sind, für den praktischen Gebrauch jedoch zu langsam sind, während die BCPL (Sprache) schnell, aber zu niedrig und damit ist ungeeignet für große Softwareentwicklung. In Bell Labs musste er den UNIX-Kernel im Hinblick auf verteiltes Rechnen analysieren, was weitere Probleme verursachte, und er machte sich daran, C (aufgrund seiner ultraportablen Natur) mit Funktionen aus der Simula zu verbessern. C ++ wurde 1983 mit zusätzlichen Funktionen wie virtuellen Funktionen, Überladen von Funktionsnamen und Operatoren, Referenzen, Konstanten, benutzergesteuertem Free-Store-Speicher, verbesserter Typprüfung und einzeiligen Kommentaren mit zwei Schrägstrichen (//) erstellt. Die Cfront (kommerzielle Version) wurde 1985 mit den Funktionen Klasse, abgeleitete Klasse, starke Typprüfung, Inlining und Standardargumente veröffentlicht. 1985 erschien auch die Programmiersprache The C ++, ein wichtiger Hinweis auf die Sprache, da es keinen offiziellen Standard gibt. Es folgte 1989 die Veröffentlichung von C ++ 2.0 mit Funktionen wie Mehrfachvererbung, abstrakten Klassen, statischen Elementfunktionen, konstanten Elementfunktionen und geschützten Elementen. Features wie Vorlagen, Ausnahmen, Namespaces, neue Casts und Boolesche Typen wurden nach 1990 hinzugefügt.

Neben der Sprache entwickelte sich auch die Bibliothek mit mehreren Ergänzungen wie der Stream-E / A-Bibliothek, der Standardvorlagenbibliothek usw.

Die ersten Ausgaben des Buches K & R von Dennis Ritchie & Brian Kernighan (ursprünglicher Name: The C Programming Language) beschreiben ihre Version von C als K & RC mit vollständigen Spezifikationen, während die späteren Ausgaben die ANSI (American National Standards) enthalten Institut) C-Standards. Einige der wichtigsten beschriebenen Merkmale sind die Einführung verschiedener Datentypen, das Entfernen mehrerer semantischer Mehrdeutigkeiten, das Weglassen anderer Funktionsdeklarationen usw. Auch nach der Einführung des ANSI C war K & RC weiterhin die portabelste Programmiersprache für Programmierer aufgrund seiner größeren Kompatibilität.

K & R-Funktionsdeklarationen enthielten keine Informationen zu Funktionsargumenten, die dazu führten, dass Funktionsparametertypprüfungen nicht durchgeführt wurden, obwohl einige Compiler eine Warnmeldung ausgaben, wenn eine lokale Funktion mit der falschen Anzahl von Argumenten aufgerufen wurde oder wenn mehrere Aufrufe einer externen Funktion verwendet wurden unterschiedliche Anzahl von Argumenten. Tools wie das Flusen-Dienstprogramm von UNIX wurden erstellt, um die Konsistenz der Funktionen zu überprüfen, die in mehreren Quelldateien verwendet werden.

Sprachmerkmale

Eigenschaften von C.

Einige der wichtigen Eigenschaften von C sind wie folgt:

  1. Strukturierte Programmiermöglichkeiten
  2. Bestätigung der ALGOL-Traditionen
  3. Kurzschlussauswertung - Verwendung nur eines Operanden, wenn das Ergebnis allein damit bestimmt werden kann
  4. Statisches Typisierungssystem zur Vermeidung unbeabsichtigter Operationen
  5. Wert übergeben Parameter mit Relevanz für die Übergabe von Zeigerwerten
  6. Heterogene Datenkombination und -manipulation
  7. Reservierte Schlüsselwörter und frei formatierter Quelltext
  8. Größere Anzahl zusammengesetzter Operatoren, z. B. + =, ++
  9. Riesige variable Versteckkapazität, obwohl Funktionsdefinitionen nicht verschachtelt werden können
  10. Verwendung von Zeichen - Ganzzahlen ähnlich der Assemblersprache
  11. Low-Level-Zugriff auf den Computerspeicher über Maschinenadressen und eingegebene Zeiger
  12. Funktionszeiger ermöglichen rudimentäre Formen von Verschlüssen und polymorphe Laufzeit
  13. Zeigerarithmetik definiert Array-Indizierung (sekundärer Begriff)
  14. Standardisierter Prozessor zum Definieren von Makros, einschließlich Quellcodedateien und bedingten Kompilierungen
  15. Komplexe Eingabe- / Ausgabe- und mathematische Funktionen mit konsistenter Delegierung an Bibliotheksroutinen
  16. Syntax wie "B" (Cs Vorgänger), jedoch anders als ALGOL, z. B.: {...} ersetzt begin ... end, && und || ersetzt und & oder, welche
  17. Während B & und | verwendet In beiden Bedeutungen unterschied C sie syntaktisch von den bitweisen Operatoren
  18. Ähnlichkeiten mit Fortran, z. B.: Das Gleichheitszeichen für die Zuweisung (Kopieren) und zwei aufeinanderfolgende Gleichheitszeichen zum Testen der Gleichheit (vergleiche mit EQ) oder das Gleichheitszeichen in BASIC)

Andere inoffizielle Merkmale, die mit der Zeit hinzugefügt wurden, waren:

  1. nichtige Funktionen
  2. Funktionen, die Struktur- oder Vereinigungstypen anstelle von Zeigern zurückgeben
  3. Zuweisungen für Strukturdatentypen aktiviert
  4. const-Qualifizierer, um ein Objekt schreibgeschützt zu machen
  5. Aufzählungsarten
  6. Erstellung eines Tools zur Vermeidung der inhärenten Probleme der Sprache

Bald wurde C leistungsfähig genug, um den UNIX-Kernel (in einer Assemblersprache geschrieben) neu schreiben zu lassen, was ihn zu einem der ersten Betriebssystemkernel macht, die in einer anderen Sprache als den Assemblersprachen geschrieben wurden.

Eigenschaften von C ++

  1. C ++ ist als statisch typisierte Allzwecksprache konzipiert, die genauso effizient und portabel ist wie C.
  2. C ++ unterstützt mehrere Programmierstile direkt und umfassend (prozedurale Programmierung, Datenabstraktion, objektorientierte Programmierung und generische Programmierung).
  3. C ++ wurde entwickelt, um dem Programmierer die Wahl zu geben, auch wenn dies es dem Programmierer ermöglicht, falsch zu wählen
  4. C ++ ist so kompatibel wie möglich mit C und bietet daher einen reibungslosen Übergang von C.
  5. C ++ vermeidet plattformspezifische oder nicht allgemeine Funktionen
  6. C ++ verursacht keinen Overhead für Funktionen, die nicht verwendet werden
  7. C ++ funktioniert ohne eine ausgefeilte Programmierumgebung

Polymorphismus, eine der herausragenden Eigenschaften von C ++, ermöglicht viele Implementierungen mit einer einzigen Interphase und ermöglicht es Objekten, den Umständen entsprechend zu handeln. C ++ unterstützt sowohl statische (Kompilierungszeit) als auch dynamische (Laufzeit) Polymorphismen. Der Polymorphismus zur Kompilierungszeit erlaubt bestimmte Laufzeitentscheidungen nicht, während der Laufzeitpolymorphismus normalerweise eine Leistungseinbuße verursacht. Obwohl C ++ als Obermenge von C betrachtet wird, gibt es einige Unterschiede, die dazu führen, dass einige gültige C-Codes in C ++ ungültig sind oder sich in C ++ anders verhalten. Probleme wie das C ++, das neue Schlüsselwörter definiert, nämlich new & class, die als Bezeichner in C verwendet werden. C- und C ++ - Codes können gemischt werden, indem jeder C-Code, der aus C ++ aufgerufen werden soll, mit C-Verknüpfung deklariert und darin platziert wird ein externer "C" {/ * C-Code * /} Block.

Entwicklungen in beiden Sprachen

Mit der Zeit wurde die Standardisierung aufgrund der großen Anzahl von Erweiterungen und einer zufälligen Bibliothek mit zunehmender Beliebtheit der Sprache und dem Mangel an präziser Implementierung von Compilern gemäß den Spezifikationen immer wichtiger. Eines der Ziele des C-Standardisierungsprozesses war es, eine Obermenge von K & R C zu erzeugen, die viele der später eingeführten inoffiziellen Merkmale enthält. Das Standardkomitee umfasste jedoch mehrere neue Funktionen wie Funktionsprototypen, Leerzeiger, Unterstützung für internationale Zeichensätze und Gebietsschemas sowie einen leistungsfähigeren Präprozessor. Die Syntax für Parameterdeklarationen wurde ebenfalls erweitert. Nach den 1970er Jahren ersetzte C BASIC als führende Sprache für die Mikroprozessorprogrammierung und wurde durch die Zusammenarbeit mit den IBM-PCs populär. In der Zwischenzeit begannen Bjarne Stroustrup und andere Mitarbeiter von Bell Labs mit der Erstellung des C ++, das C objektorientierte Programmiersprachenkonstrukte hinzufügte. Außerdem bildete ANSI 1983 ein Komitee namens X3J11, um eine Standardspezifikation für C und 1989 für das C ++ zu erstellen Standard wurde als ANSI X3.159-1989 "Programmiersprache C" ratifiziert. Dies ist die Version von C, die häufig als ANSI C, Standard C oder C89 bezeichnet wird. C90 wurde 1990 eingeführt und war bis auf einige geringfügige Änderungen C89. Während sich C ++ schnell entwickelte, blieb C bis 1995 statisch, als mit der normativen Änderung 1 eine neue Norm geschaffen wurde, die weiter überarbeitet wurde und 1999 zur Veröffentlichung von ISO 9899: 1999 führte. Diese Norm wird allgemein als "C99" bezeichnet. Es wurde im März 2000 als ANSI-Standard übernommen. Einige der neueren Funktionen sind nachstehend aufgeführt:

  • Inline-Funktionen
  • Möglichkeit, Variablen überall zu deklarieren, anstatt nur nach einer anderen Deklaration oder am Anfang einer zusammengesetzten Anweisung
  • Neue Datentypen wie long long int, optionale erweiterte Ganzzahltypen, expliziter boolescher Datentyp und komplexer Typ zur Bezeichnung komplexer Zahlen
  • Array-Längen können variabel sein
  • Einzeilige Kommentare, die mit // beginnen, werden unterstützt
  • Bibliotheksfunktionen wie snprintf
  • Neue Header-Dateien wie stdbool.h und inttypes.h
  • Typ-generische mathematische Funktionen (tgmath.h)
  • Verbesserte Unterstützung für IEEE-Gleitkomma
  • Ausgewiesene Initialisierer
  • Zusammengesetzte Literale
  • Unterstützung für verschiedene Makros (Makros mit variabler Arität)

Während sich C ++ weiterentwickelt, um den Anforderungen der Zukunft gerecht zu werden, wird derzeit eine neuere Version namens C ++ 0x entwickelt, die angibt, dass die Veröffentlichung vor 2010 erwartet wird. Hinweise deuten darauf hin, dass C ++ weiterhin von seinem Multi-Paradigma-Charakter profitieren wird, und bemerkenswerte Verbesserungen können native Unterstützung für Threading und Konzepte sein, wodurch die Arbeit mit Vorlagen erleichtert wird. Umstrittener wird das Hinzufügen der Speicherbereinigung derzeit heftig diskutiert. Eine Gruppe namens Boost.org, die das C ++ - Standardkomitee hinsichtlich der erforderlichen guten Funktionen und Verbesserungen berät, arbeitet intensiv an der Entwicklung von C ++ in seiner aktuellen Form mit erweiterten Funktionen für Funktionen und Metaprogrammierung.

In The Design and Evolution of C ++ (1994) beschreibt Bjarne Stroustrup einige Regeln, die er für das Design von C ++ verwendet hat. Wenn Sie die Regeln kennen, können Sie besser verstehen, warum C ++ so ist, wie es ist. Viel mehr Details finden Sie in Das Design und die Evolution von C ++.

Einflüsse

Der Einfluss von C lässt sich auf Werke wie awk, csh, C ++, C #, D, Objective-C, Concurrent-C, BitC, Java und JavaScript, Limbo, Perl, PHP usw. zurückführen. Einige der wichtigsten Implementierungen von C umfassen Borland C, Watcom C, GCC und MSVC. C ++ hat andere Werke wie D, C #, ADA 95, Aikido, Java und PHP beeinflusst.

Kritik an C vs. C ++

Trotz seiner Beliebtheit wurde C dafür kritisiert, dass wünschenswerte Operationen zu schwer zu erreichen und unerwünschte Operationen zu einfach sind, um sie versehentlich aufzurufen, wodurch mehr Programmiererfähigkeiten, Erfahrung, Aufwand und Liebe zum Detail als bei anderen Programmiersprachen für die sichere und effektive Verwendung erforderlich sind der Sprache.

Als objektorientierte Sprachen populär wurden, war C ++ eine Erweiterung von C, die objektorientierte Funktionen mit C ++ bereitstellte, das ursprünglich als Präprozessor implementiert war. Der Quellcode wurde in C übersetzt und dann mit einem C-Compiler kompiliert.

C ++, das von C abgeleitet ist, erbt auch die meisten Kritikpunkte, die gegen C gerichtet sind. Da es sich bei der Sprache jedoch tatsächlich um eine Komposition aus zwei verschiedenen Sprachen handelt, zusammen mit der Menge an riesigen Programmen, wird die Kompilierung häufig riesig und unangemessen von reiner Größe. Als versucht wurde, dieses Problem durch Deaktivieren einiger Randcodes zu vermeiden, wurde erneut kritisiert, dass einige wichtige Dienstprogramme verloren gegangen seien. Der Entwickler von C ++ ist auch der Ansicht, dass C ++ eine komplexe Sprache ist, da die modernen Programmieranforderungen im Vergleich zu früher ebenfalls erheblich gestiegen sind.

Ähnlicher Artikel