Nein, C und C++ sollten als völlig unterschiedliche Programmiersprachen angesehen werden, auch wenn selbst Fortgeschrittene oft den Fehler machen, diesen beiden Sprache eine viel zu große Nähe nachzusagen.
Diese Aussage stammt sinngemäß von Bjarne Stroustrupp, dem Erfinder von C++, und er hat völlig Recht.
Genau genommen haben C und C++ nur wenige Teile der Syntax gemeinsam. Was du übersiehst, ist die Art und Weise, wie ein Programm entworfen wird. Diese Paradigmen oder Konzepte sind wichtiger als die Syntax und wer sie nicht kennt und beherrscht, der wird nicht vernünftig programmieren können.
Du wirst kaum einen Quelltext finden in dem selbst wenige Zeilen in der C-Version genau so aussehen, wie in der C++-Version, weil diese Sprachen, und die Programmierung darin, VÖLLIG unterschiedlich ist!
Nehmen wir mal an, wir wollen ein etwas an den Haaren herbeigezogenes Programm schreiben, welches einen String aus einem statischen Speicher in einen dynamischen kopiert, den Text ausgibt, danach den Speicher aufräumt, und wenn alles geklappt hat, einen "Erfolg" zurück gibt.
In C wäre das ungefähr so etwas:
#include <stdio.h> // puts
#include <stdlib.h> // calloc, EXIT_FAILURE, EXIT_SUCCESS
#include <string.h> // strlen
int main() {
static const char * const foobar = "foobar";
int result = EXIT_FAILURE;
char * const copy = calloc(strlen(foobar) + 1, sizeof(*foobar));
if (copy) {
if (puts(strcpy(copy, foobar)) >= 0) {
result = EXIT_SUCCESS;
}
free(copy);
}
return result;
}
In C++ hingegen würde die gleiche Funktionalität ungefähr so aussehen:
#include <iostream> // cout, endl
#include <string> // string
#include <cstdlib> // EXIT_FAILURE, EXIT_SUCCESS
int main() try {
using namespace ::std;
cout.exceptions(ostream::failbit);
constexpr auto foobar { "foobar" };
const string copy { foobar };
cout << copy << endl;
return EXIT_SUCCESS;
} catch (...) {
return EXIT_FAILURE;
}
Natürlich gibt es noch etwas andere herangehensweisen, und man könnte in C auch strdup() nutzen, was aber nicht portabel ist, und ich will in den Beispielen bei Standard-C und Standard-C++ bleiben.
So, und nun frage dich mal selbst: Sehen die Beispiele gleich aus? Sehen die sich wenigstens ähnlich?
Ich würde beide Fragen mit Nein beantworten, obwohl es zwar in beiden Klammern, Präprozessoranweisungen und einige gemeinsame Literale gibt, so ist die herangehensweise doch komplett unterschiedlich!
C hat eine recht hohe zyklomatische Komplexität, C++ hingegen kaum. Und das ist auch bei den meisten "richtigen Programmen" so, wenn man a) auf sauberes Programmieren mit Fehlerprüfungen achtet und b) in der Art bzw. mit den Konzepten programmiert, welche die Programmiersprache vorsieht.
Fazit: Es wird nicht nur "behauptet", dass C und C++ unterschiedlich sind, das ist schlicht und ergreifend ein Fakt! Und nur weil du C-Code größtenteils mit einem C++-Compiler übersetzen kannst, und beide Sprachen einige Überschneidungen haben, ändert das nichts daran.
Man kann auch Java-Code teilweise mit einem C++-Compiler übersetzen! Und Java hat sogar mehr Gemeinsamkeiten mit C++, als C++ mit C, aber niemand würde ernsthaft behaupen, dass diese Sprachen (fast) gleich sind.
Gut, Anfänger denken das oft, weil sie noch keinen Überblick haben, und auch Fortgeschrittene, die oft zu faul sind, sich weiter zu bilden, und auf einem sehr niedrigen Sprachlevel dahindümpeln, denken das ... stimmt aber überhaupt gar nicht.
Wie gesagt, du wirst kaum einen Code finden, den man Eins zu Eins von C in C++ übernehmen würde, ohne ihn massiv anzupassen und zu verändern.
Einfach weil C und C++ ganz unterschiedliche Programmiersprachen sind. Punkt. :)
Und um noch auf ein paar Dinge einzugehen, die du missverstanden hast:
C++ ist nicht nur eine Erweiterung von C und C-Code kann man NICHT immer auch mit einem C++-Compiler übersetzen!
Das obige C-Beispiel wird eine Compilerwarnung auslösen, wenn es mit einem C++-Compiler übsetzt wird, weil das Ergebnis von calloc() nicht gecastet wurde.
Ein großer und wichtiger Unterschied zwischen C und C++ ist nämlich das implizite Casting von void-Zeigern! Und es gibt noch VIEL mehr Unterschiede! Kannst dir ja mal sizeof('a') mit einem C-Compiler und mit einem C++-Compiler ausgeben lassen!
Und C hat z. B. einen eigenen Namensraum für Strukturen und Enums ... bei C++ liegt das alles im globalen Namensraum. Das mag unwichtig erscheinen, wird aber richtig wichtig, wenn du eine kompatible Bibliothek schreiben willst.
C und C++ haben unfassbar viele Unterschiede und C ist sehr oft ganz und gar nicht aufwärtskompatibel zu C++.
Außerdem kann man bei C++ Code sowohl vor als auch nach der main() Methode ausführen. Bei C ist das nur sehr sehr eingeschränkt möglich, wenn überhaupt.
Und C++ kann zur Kompilierzeit interpretiert werden! Das heißt, wo du bei C oft kryptische Arrays mit vorberechneten Konstanten hast, werden diese bei C++ zur Kompilierzeit einmalig berechnet, und können ganz nebenbei - ebenfalls zur kompilierzeit - auf Korrektheit überprüft werden! Das ist mit C leider völlig unmöglich.
Naja, lange Rede, kurzer Sinn: C und C++ haben DEUTLICH mehr Unterschiede als Gemeinsamkeiten. Genau genommen muss man die Gemeinsamkeiten schon mit der Lupe suchen, wenn man das Gesamtbild betrachtet.
Viel Spaß noch! :)