Welcher C++ Compiler vesteht C



  • Es gibt keinen C++ Compiler der C kann. Denn dann waere es ja ein C Compiler.

    CSS schrieb:

    Eigentlich müsste jeder C++ Compiler auch C übersetzen können, da C++ ja zu 100% abwärtskompatibel ist.

    main() { printf("Hello World\n"); exit(0); }
    

    warum will mein C++ Compiler das nicht uebersetzen 😞 😞



  • Shade Of Mine schrieb:

    warum will mein C++ Compiler das nicht uebersetzen 😞 😞

    Weil ihm "Hello, World" Programme schon zum Halse raushängen 😉



  • Shade Of Mine schrieb:

    Es gibt keinen C++ Compiler der C kann. Denn dann waere es ja ein C Compiler.

    Stimmt wahrscheinlich, aber um den Originalposter nicht zu verwirren, schreibe ich dazu, dass jedem C++-Compiler, den ich kenne, auch ein C-Compiler beiliegt.



  • Ringding schrieb:

    ...schreibe ich dazu, dass jedem C++-Compiler, den ich kenne, auch ein C-Compiler beiliegt.

    Genau das habe ich gemeint.

    MfG CSS



  • CSS schrieb:

    Ringding schrieb:

    ...schreibe ich dazu, dass jedem C++-Compiler, den ich kenne, auch ein C-Compiler beiliegt.

    Genau das habe ich gemeint.

    haste nicht. er meint damit 2 verschiedene compiler, einer für c und einer für c++.
    btw: früher gabs auch welche, die haben den c++ code erst in c umgewandelt und dann durch'n c-compiler gejagt. der erste von diesem finnen/schweden/norweger was-weiss-ich (c++ erfinder) war so einer



  • net schrieb:

    btw: früher gabs auch welche, die haben den c++ code erst in c umgewandelt und dann durch'n c-compiler gejagt. der erste von diesem finnen/schweden/norweger was-weiss-ich (c++ erfinder) war so einer

    Stroustrup ist Daene und sein Compiler hiess cfront



  • net schrieb:

    btw: früher gabs auch welche, die haben den c++ code erst in c umgewandelt und dann durch'n c-compiler gejagt. der erste von diesem finnen/schweden/norweger was-weiss-ich (c++ erfinder) war so einer

    1. Du meinst Bjarne Stroustrup.
    2. Comeau tut das IIRC auch.



  • nman schrieb:

    1. Du meinst Bjarne Stroustrup.

    jo, mir ist der name nicht eingefallen

    nman schrieb:

    2. Comeau tut das IIRC auch.

    wow, das soll eh' einer der besten c++ compiler sein, die's gibt. hätte nicht gedacht, dass die's so machen. schade nur, dass es den nicht zum downloaden gibt



  • zu dem hello world prog...vielleicht return 0; statt exit(0); 😕 , ich weiss nicht ob das hilft aber ich benutz in c und c++ immer nur return und da gehts
    ------------------------------------------------------------
    aber eigentlich bin ich ja hier weil ich eine frage hab die diesen kleinen c/c++ unterschied der vorhin angesprochen wurde betrifft. Folgendes...ich schreibe gerade in DevC++ in C++ mit SDL ein kleines Spiel...ich probier es jedenfalls 😃 ...und hab mir dazu einen zusätzlichen Kollisionsabfrage-Code besorgt, der allerdings in C ist.
    Erst hab ich die datei auch als C++ kompiliert und da bin ich ja selbst schuld dass es fehler bringt...folgenden:

    1. invalid conversion from `void*' to `bitmask_t*'
    2. invalid conversion from `void*' to `long unsigned int*'

    für folgende code zeilen:

    1. bitmask_t *temp = malloc(sizeof(bitmask_t));
    2. temp->bits = calloc(h*((w - 1)/BITW_LEN + 1),sizeof(BITW));
    

    ------------------------------------------------------------
    also hab ich mir gedacht mach ich mal für die entsprechende datei in den optionen das "Compile as C++" weg...funzt auch, aber dann bringt der Linker einen fehler:

    Linker error: undefined reference to bitmask_create(int, int)' Linker error: undefined reference tobitmask_free(bitmask*)'

    Jetzt meine Frage(n),
    kann man c++ object files nicht mit c object files linken("include in link process" war an für die .c datei)?
    oder wie kann ich die entsprechenden code zeilen in c++ umwandeln...einen anfang hab ich schon getan, die erste zeile hab ich einfach zu

    bitmask_t *temp = new bitmask_t;
    

    gemacht...hat auch scheinbar funktioniert, wobei ich mir nicht ganz sicher bin ob das das gleiche ist...aber dann bin ich an der zweiten zeile irgendwie verzweifelt, da ich leider noch nicht allzuviel plan von dynamichem speicher reservieren usw. hab ist das glaub ich auch verständlich 🤡
    Ich hoffe mir kann jemand helfen, bin grad so schön motiviert das spiel zu bauen 😃

    thx...cya kolf

    ps: sorry das ich mich nicht ganz zusammenhängend an ein anderes threat anhänge aber ich hab mir gedacht thema passt und besser so als für jeden kleinen scheiss neues threat aufmachen



  • versuche mal folgendes

    extern "C" {
    #include "collision.h"
    }
    oder so ähnlich.
    K.



  • Das mit dem new solltest du schnell wieder weg machen!
    /edit: weil der Rest ja mit malloc und free gemacht ist ->pi= new int;free pi; ->crash...



  • wow...das ging schnell...hatt ich als modem user ohne flat nicht mal zeit mich zwischendrin abzumelden 😃

    @zuk: ja man...das geht...*freu*...danke für die schnelle antwort 🙂

    @ness: ja...wirklich ernst war das auch nicht gemeint...hab eh nicht genau n plan was das new anderst macht,ich weiss nur das es was anderst macht und glaub ich eher für klassen gedacht ist, das war son frust-rumprobieren halt...aber der fehler war weg 😃

    so...nun muss ich aber weitermachen 😉
    thx...cya kolf



  • rike19 schrieb:

    Ich benutze Windows XP, kann Visual C++ stan**** 2003 noch c compilieren?

    kann der eigentlich (teilweise) C99 oder wird der gar nicht mehr weiter entwickelt?



  • Ich dachte immer C++ ist wird auf C runtergebrochen, ergo ist jedes C++ C und C ist am Ende assembler.

    also muss vom logischen her jeder c++ compiler doch auch c verstehenkönneN?



  • Also die Zeit das c++ auf c umgeschrieben wird ist doch längst vorbei, oder?



  • kingruedi schrieb:

    kann der eigentlich (teilweise) C99 oder wird der gar nicht mehr weiter entwickelt?

    Also der 2003er nicht mehr und ich habe auch schon ewig nichts mehr in die Richtung gehört (da scheint selbst export Vorrang zu haben). Gibt es denn überhaupt Nachfrage nach C99 außerhalb der OSS-Welt?



  • Im aktuellen C++ Standard steht, dass der C++ Compiler mindestens zu ANSI C von 1990 kompatibel sein muss, aber es ist auch erlaubt, moderneren C-Normen zu folgen.

    VC++ 2003 ist weitestgehend zu den aktuellen C++ und C Normen kompatibel.

    GCC ist ein bisschen besser ausgeruestet.

    Generell gilt: Wenn man als Dateiendung ".c" verwendet, wird ein reiner C Compiler aufgerufen. Nur bei den Dateiendungen ".cpp", ".cxx", ".c++", und ".CC" wird der C++ Compiler aufgerufen.

    Programme wie "gcc" (GNU) und "cl" (Microsoft) sind Frontends, die Anhand der Dateiendung das entsprechende Programm starten.

    Uebrigens: Das Beispiel

    main() { printf( "hello world!\n" ); exit(0); }
    

    ist auch in ANSI C90 bzw. C99 ein Syntax-Fehler (es fehlen bei "main" Argumentliste und Rueckgabetyp). Jedoch sind reine C Compiler meist noch abwaertskompatibel zu den alten K&R-de-facto-Standards aus den 70ern und 80ern. In C++ Compilern ist das nicht erforderlich.

    Ein C++ Compiler muss als Ausgabe keine Binaerdatei erzeugen, er kann auch, wie frueher, nur nach C uebersetzen (oder Pascal oder was auch immer).


Anmelden zum Antworten