Der Name "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 :

    1. hat keine Ahnung
    2. ist ein fanatischer Microsoftanhänger
    3. 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 of do_it' with no type main.cc: In functionint main()':
    main.cc:3: error: too many arguments to function int 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 of do_it' with no type main.cc:11: error:int do_it' redeclared as different kind of symbol
    main.cc:3: error: previous declaration of int 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 of do_it' with no type main.cc: In functionint main()':
    main.cc:3: error: too many arguments to function int 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 of do_it' with no type main.cc:11: error:int do_it' redeclared as different kind of symbol
    main.cc:3: error: previous declaration of int 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++.



  • LordJaxom schrieb:

    @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;
    }
    

    Hey, willst du hier etwa jemandem klarmachen, dass du die alte R&K C Syntax aus den 70ern noch nutzt? Ging es denn gerade nicht um die _aktuellen_ Standards?



  • Ging es denn gerade nicht um die _aktuellen_ Standards?

    Schau dir einfach mein Beispiel an. Gibt gar keinen Grund esoterische Sprachfeatures zu benutzen.



  • Das hat wenig mit Esoterik zu tun als damit dass man das Geld um alten Code der immernoch läuft zu aktualisieren nicht ausgibt, wenn es nicht nötig ist 😉

    Und bei uns im Haus hat diese Unwissenheit wie sie auch lucky_tux an den Tag legt genau dazu geführt, dass man mal einfach C-Code nach Windows portiert, als C++ kompiliert hat und sich jetzt wundert, warum der VS2005 (der sehr wohl sehr standardkonform ist) das nicht mehr schluckt.


Anmelden zum Antworten