Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung |
Stand: 2024-04-07, work in progress
mit vielen Beiträgen von
ChatGPT 4
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 |