Der Name "C++"
-
1. C++ ist eine Obermenge von C
nein. sonst würde man jedes C Programm auf einem C++ compiler compilieren können.
-
Wie meine Beitragsanzahl zumindest erahnen lässt, bin ich recht neu in der Materie, daher kann ich selbst wenig Qualifiziertes von mir geben.
Ich habe das aus dem Stroustrup zitiert.* Ich gehe davon aus, dass der Herr bescheid wissen sollte.
Zu deiner Aussage möchte ich anmerken, dass 'C++ != C++-Compiler'. Aber warscheinlich meinst du einen optimalen C++-Compiler, der sich 100% nach dem Sprachstandard richtet. (Gibt es das?)...
***** Ok, gerade noch einmal nachgeschlagen: "Bis auf kleine Details ist C++ eine Obermenge der Programmiersprache C."
Hatte ich ungenau zitiert.Aber dennoch finde ich, dass eine Definition, wie genau C++ nun mit C zusammenhängt (oder auch nicht), schon allein an der Interpretationsfreude der Sprache scheitert.
MfG
-
Wenn C++ nur ein erweitertes C ist, dann kann man mir vielleicht auch erklären, warum ich ein C-Programm (welches alle C-Features nutzt) nicht auf einem C++-Compiler kompilieren kann? Bzw. warum enthält der C++ ISO-Standard nicht alle Features die C drin hat?
Natürlich ist C++ aus C entsprungen, aber Java und C# sind auch irgendwie aus C++ entsprungen. Ein Bsp.:
int i = 0; hallo(i);Diese zwei Zeilen funktionieren sowohl unter C, unter C++, Java und C#. Deshalb sind diese Sprachen trotzdem völlig unterschiedlich und nicht ein C.
-
Man,man,man.
C++ ist ganz einfach nur C , bloß um einige Sprachelemente und ein neues Programmierkonzept erweitert.
Punkt.
Und wer was anderes behauptet, dass z.B. C++ nix mit C zu tun hat, der :
- hat keine Ahnung
- ist ein fanatischer Microsoftanhänger
- wurde als Kin paar mal fallen gelassen
Ich meine:
Was soll der scheiss mit "C++ hat absolut nix mit C zu tun"?Wie ist denn C++ entstanden? Na?
(ps: Nein, ich habe diesen Thread nicht ganz gelesen, da es mir zu blöd ist, immer den gleichen Mist zu lesen)
-
@ normal:
Endlich mal jemand der bescheid weiß.
C++ ist eine Obermenge von C, so wie Stroustrup so schön sagt. Das bedeutet dass man jedes C Programm auf einem C++-Compiler übersätzen kann. Das bedeutet aber auch, dass viele meinen sie würden in C++ Programmieren, dabei verwenden sie nur die Mittel die in C zur Verfügung stehen.Fakt ist auf jedem Fall das C++ die strukturierte (prozedurale und modulare, etc.) Sprache C mit der Objektorientierung und einer sehr gut designten Standardbibliothek erweitert hat. C++ unterstützt (soweit ich weiß) alle relevanten Konzepte der OOP.
-
lucky_tux schrieb:
Das bedeutet dass man jedes C Programm auf einem C++-Compiler übersätzen kann.
Und das geht ebend NICHT!
-
Artchi schrieb:
lucky_tux schrieb:
Das bedeutet dass man jedes C Programm auf einem C++-Compiler übersätzen kann.
Und das geht ebend NICHT!
Dann haste nen beshcissenen compiler.
Lass mich raten: Du nutzt ein Microsoft compiler oder ein Borland compiler?
Borland ist eh nur der Schwanz von Microsoft.
-
Hallo,
So wie ebend auch nicht geht :p
@normal: man sollte sich aber den thread ganz durchlesen. Es wurde ausdrücklich von otze gesagt, dass man nicht jedes C-Programm auf C++-Compilern "übersätzen" kann.
MFG winexec*
-
nach der entwicklung von C++ kam ein neuer C sprachstandard mit neuen features raus, die in C++ nicht mehr übernommen wurden. Welcher C++ Compiler der standardkonform ist, sollte diese features also unterstützen.
-
@ winexec:
Nur weil jemand behauptet das es nicht möglich wäre C Quelltext auf einem C++-Compiler zu kompilieren, bedeutet das noch längst nicht das die Aussage korrekt ist.
Würded ihr mir auch glauben, dass C++ ein neumodischer Brotbackautomat, der sich bei einem bekannten schwedischen Möbelhaus erkaufen lässt, ist?
Habt ihr "The C++ Programming Language" oder die dt. Übersetzung "Die C++ Programmiersprache" von Bjarne Stroustrup gelesen. Hier wird ausdrücklich gesagt das C++ abwärtskonform du C ist - C++ ist eine Erweiterung oder eine Obermenge von C. Somit lässst sich jeder C-Quelltext unter einem C++-Compiler ubersätzen. Bedingung dafür ist aber, dass der Quelltext und der Compiler sich an die Standards halten. Da sich der M*cr*soft Compiler aber nicht an die Standards hällt ist es nicht verwunderbar das die Abwärtskommpatibilität nicht vorhanden ist.
Anderes Beispiel: Was hat M*cr*soft aus Java gemacht? Java ist eine plattformunabhängige Programmiersprache. Aber die Version von Microsoft wurde so modifiziert, dass es nicht möglich ist Java-Programme von Windows zu portieren.
-
Nein, ich habe einen ISO-C++ konformen Compiler, und das ist wichtig. Warum soll ein ISO-C++ Compiler einen ISO-C-Standard unterstützen, wenn er ein ISO-C++ Compiler ist??? Wenn ich C kompilieren will, nehme ich einen C-Compiler. Wenn ich Java compilieren will, nehme ich einen Java-Compiler. Wenn ich C#...
Merkt ihr hier was?
-
lucky_tux: Du hast einfach keine Ahnung.
-
lucky_tux schrieb:
Habt ihr "The C++ Programming Language" oder die dt. Übersetzung "Die C++ Programmiersprache" von Bjarne Stroustrup gelesen. Hier wird ausdrücklich gesagt das C++ abwärtskonform du C ist - C++ ist eine Erweiterung oder eine Obermenge von C. Somit lässst sich jeder C-Quelltext unter einem C++-Compiler ubersätzen. Bedingung dafür ist aber, dass der Quelltext und der Compiler sich an die Standards halten. Da sich der M*cr*soft Compiler aber nicht an die Standards hällt ist es nicht verwunderbar das die Abwärtskommpatibilität nicht vorhanden ist.
Von wann ist dieses Buch? Aha!
Der C- und C++-Standard werden von zwei verschiedenen ISO-Komitees verabschiedet. Es gibt heute in C Features, die wir in C++ seit 7 Jahren vergeblich suchen. Man sollte sich über den aktuellen Stand der Technik informieren. Man sagt nicht umsonst, das die Computerwelt schnelllebig ist. Dazu zählt nicht nur die CPU-Technik, sondern auch die von Software und Sprach-Normierungen.
Und das sich der MS-Compiler nicht an den ISO-Standard hält, stimmt auch nicht. Informier dich mal, das Herb Sutter (MS-Mitarbeiter!) den Vorsitz im ISO-C++ Komitee inne hat! Und das Herb Sutter einiges tut um C++ und sein Baby C++/CLI zu pushen. Selbst TR1 wird demnächst vom MSVC unterstützt werden. Und wenn C++/CLI mit in den ISO-C++-Standard einfliessen wird (was das Ziel von MS ist!), wird der Compiler weiter die ISO-C++-Norm unterstützen müssen. Also selbst die nächsten Jahre wird MS den ISO-C++ unterstützen, da sie ISO-C++ pushen.
-
@lucky_tux:
Dann erklär mir mal wieso den folgenden Code kein C++-Compiler, den ich hier habe, übersetzt, aber jeder C-Compiler?
#include <stdio.h> static do_it( ); int main(void) { int x = do_it(12); } static do_it(x) int x; { return x * 2; }
-
@lucky_tux
Es ist zwar richtig, dass C++ seine Wurzeln in C hat. Damit irrst du allerdings:Somit lässst sich jeder C-Quelltext unter einem C++-Compiler ubersätzen.
Zwischen C und C++ besteht keine echte Teilmengenbeziehung. Weder ist C eine echte Teilmenge von C++, noch andersherum.
Zwar übernimmt der C++ Standard einige Teile des C-Standards (C89), er führt aber auch Änderungen hinzu, die legale C-Programme in C++ illegal machen. Beispiel dafür ist das strengere Typsystem von C++.
Am Beispiel:#include <stdlib.h> int main() { int* i = malloc(sizeof(int)); }Das ist ein völlig legales C-Programm, aber kein C++.
In C++ müsste es so aussehen:#include <stdlib.h> int main() { int* i = static_cast<int*>(malloc(sizeof(int))); }Der Grund: C89 definiert eine implizite Typkonvertierung von void* zu jedem anderen Datenzeiger. In C++ hingegen ist diese Konvertierung nicht implizit. Hier ist nur die umgekehrte Richtung implizit. Wer also von void* nach int* will muss in C++ immer casten.
Das ist nur ein Beispiel. Es gibt tausende andere. Umgangssprachlich kann man C++ als Obermenge von C bezeichnen, korrekt ist es aber nicht. Im Gegensatz zu Java und C++ oder C# und C++ teilen C und C++ aber nicht nur syntaktische Gemeinsamkeiten.
-
@ LordJaxiom:
Der Quelltext funktioniert nicht mit dem C++ Compiler. Ist es das was du hören willst? Gut okey.... aber der Quelltext funktioniert auch nicht mit einem C-Compiler!
martin@debian:~/Documents/temp/utest$ gcc main.cc
main.cc:3: error: ISO C++ forbids declaration ofdo_it' with no type main.cc: In functionint main()':
main.cc:3: error: too many arguments to functionint do_it()' main.cc:7: error: at this point in file main.cc: At global scope: main.cc:10: error:x' was not declared in this scope
main.cc:11: error: ISO C++ forbids declaration ofdo_it' with no type main.cc:11: error:int do_it' redeclared as different kind of symbol
main.cc:3: error: previous declaration ofint do_it()' main.cc:11: error: Syntaxfehler beforeint'
martin@debian:~/Documents/temp/utest$
-
C++ ist als Erweiterung aber auch konzeptionelle Erneuerung von C zu sehen.
C++ wurde in den 80er Jahren in den Bell Laboratories entwickelt. Die erste Version eines C++-Compilers entstand 1985 bei AT&T. Bjarne Stroustrup http://www.henkessoft.de/C++/Cpp_school/stroustrup.jpg gilt als Erfinder der Sprache C++.
Aus dem ursprünglichen „C mit Klassen“ wurde später der Begriff C++, der auf den Inkrementoperator ++ hindeutet. Im Jahr 1986 veröffentlichte Bjarne Stroustrup das wegweisende Buch „The C++ Programming Language“, das auch heute noch als wichtiges Lehrbuch und Standardwerk anerkannt wird.
Der ANSI Standard für C++ wurde erst im Juni 1998 festgelegt.
Neben dem Ziel, eine objektorientierte Sprache zu schaffen, war die Abwärtskompatibilität zu C ein wichtiges Ziel. Deshalb ist C als Teilmenge von C++ vorhanden, was manche Anwender aus heutiger Sicht kritisieren, weil sie sich ein reinrassiges objektorientiertes C++ wünschen.
Bjarne Stroustrup, der Entwickler der ersten C++-Version drückte die Fähigleiten von C++ in folgender Weise aus:
"C makes it easy to shoot yourself in the foot; C++ makes it harder, but when you do it blows your whole leg off."
http://www.research.att.com/~bs/bs_faq.html
-
@lucky_tux:
Achso und deshalb steht in der Meldung "ISO C++ forbids" *hirnbatsch*Ändere doch mal die Endung auf .c
-
Die Fehlermeldungen sehen nach C++ Kompilierung aus.

ISO C++ forbids
-
lucky_tux schrieb:
Der Quelltext funktioniert nicht mit dem C++ Compiler. Ist es das was du hören willst? Gut okey.... aber der Quelltext funktioniert auch nicht mit einem C-Compiler!
martin@debian:~/Documents/temp/utest$ gcc main.cc
main.cc:3: error: ISO C++ forbids declaration ofdo_it' with no type main.cc: In functionint main()':
main.cc:3: error: too many arguments to functionint do_it()' main.cc:7: error: at this point in file main.cc: At global scope: main.cc:10: error:x' was not declared in this scope
main.cc:11: error: ISO C++ forbids declaration ofdo_it' with no type main.cc:11: error:int do_it' redeclared as different kind of symbol
main.cc:3: error: previous declaration ofint do_it()' main.cc:11: error: Syntaxfehler beforeint'
martin@debian:~/Documents/temp/utest$Äh. Hallo? Du solltest das natürlich auch als C kompilieren. Nicht C++.