Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung | Blog RSS

Stand: 2024-04-07, work in progress mit vielen Beiträgen von ChatGPT 4

Unterschiede von C, C++ und Python

Aspekt C C++ Python
Einsatzgebiete Systemnahe Programmierung, eingebettete Systeme, Performance-kritische Anwendungen System-/Anwendungsprogrammierung, Spielentwicklung, Echtzeitanwendungen Webentwicklung, Datenwissenschaft, Automatisierung, Prototyping, Bildungsbereich
Standardbibliothek und Drittanbieter-Bibliotheken Begrenzte Standardbibliothek; viele Drittanbieter-Bibliotheken für verschiedene Aufgaben Umfangreiche Standardbibliothek und viele Drittanbieter-Bibliotheken Sehr umfangreiche Standardbibliothek; riesiges Ökosystem an Drittanbieter-Bibliotheken für fast jede Aufgabe
Compiler vs. Interpreter Vor der Ausführung von Programmcode müssen Compiler und Linker laufen; die von denen erzeugten Binärdateien lassen sich direkt starten. (Gilt für die üblichen Arten von C.) wie C Man kann ein Programm scheinbar direkt aus dem Editor starten. (Gilt für die üblichen Arten von Python.)
Ausführungsgeschwindigkeit sehr hoch, da direkt in Maschinencode kompiliert ähnlich C deutlich niedriger als C/C++, aber für viele Anwendungen ausreichend; rechenaufwändige Operationen mittels Bibliotheken auf Geschwindigkeitsniveau von C
Modulares Programmieren begrenzte Unterstützung durch separate Header-Dateien und #include verbesserte Unterstützung durch Namespaces, Header-Dateien und #include starke Unterstützung durch Module und Pakete, import
Bildung von Codeblöcken Schweifklammern, beliebige Leerzeichen und Zeilenumbrüche wie C strikte Einrückung
Typisierung Die Typen wie int und float sind immer anzugeben (Ausnahme: void*) und werden vom Compiler geprüft, noch bevor das Programm laufen kann. wie C, selten variant und any Typen müssen nicht festgelegt werden, aber man sollte Type Hints angeben, die schon beim Editieren (unverbindlich) geprüft werden.
Objekterzeugung und -vernichtung Nicht direkt unterstützt, manuell mit malloc und Initialisierung, free zur Freigabe Verwendung von Kontruktoraufrufen wie new MeineKlasse() zur Erzeugung von Objekten und delete zur Speicherfreigabe, Smart Pointer Erzeugung mit Konstruktoraufrufen der Art obj = MeineKlasse(), Speicherverwaltung ist automatisch (Garbage Collector)
Anlegen von Variablen int a = 23; wie C a = 23, oder besser mit Typenangaben a: int = 23
Potenzierung keine eingebaute Operation, erfordert Funktion wie pow aus der math-Bibliothek wie C Operator ** wie bei x ** y
Zeichenketten char-Arrays mit manueller Verwaltung; Funktionen aus der Standardbibliothek für String-Manipulation Klasse std::string Strings sind eingebaute Typen
Definition von Funktionen, die (wie üblich) einen Namen haben int verdopple(int x) usw. wie C def verdopple(x): usw. oder besser mit Typenangaben def verdopple(x: int) -> int:
Überladen von Funktionen/Methoden (dürfen im selben Scope den gleichen Namen haben, wenn ihre Parameter in Anzahl oder Typ verschieden sind) nein ja nur, indem man darin die Argumente untersucht, und bei Properties
Überladen von Operatoren nein ja ja
Definition von Klassen nur struct ohne Methoden class Fahrrad : public Fahrzeug class Fahrrad(Fahrzeug):
Fehlerbehandlung manuelle Überprüfung von Fehlercodes Exceptions mit try und catch Exceptions mit try und except