Compilerunterschiede?



  • Servus miteinander, ich bin relativ neu in C eingestiegen und habe mit Code::Blocks als Umgebung angefangen, hab mich jedoch eine Stunde rumgeärgert warum meine Funktion zum tauschen zweier Werte nicht funktionierte. Er tauschte entweder nur einen Wert und beließ den anderen wie er war, oder eben garnicht.

    Habe jetzt Dev-C++ heruntergeladen und siehe da meine Funktion funktionierte einwandfrei.
    Ist der Unterschied zwischen dem GNU GCC Compiler und dem integrierten Compiler von Dev-C++ so riesig?

    Hier die Funktion

    void mvit(int *x,int *y)
    {
        int hilfe;
        help = *x;
        *x= *y;
        *y= help;
    
    }
    


  • hilfe = help, hab mich vertan beim abtippen, sorry! Das war nicht der Fehler!



  • Der Compiler macht im Gegensatz zu dir keine Fehler, weder der eine noch der andere von dir genannte Compiler.
    Und du machst sogar Fehler beim Abtippen.



  • Nun vom PC aus.
    Komplettes Beispiel:

    #include <stdio.h>
    
    void tausche(int *x,int *y)
    {
        int help;
        help = *x;
        *x = *y;
        *y = hilfe;
    
    }
    
        int main()
    {
        int i;
        char *text1="Das ist mein erster Satz.";
        char *text2="Das ist mein zweiter Satz.";
    
        printf("\nx = %s\ny = %s",text1,text2);
    
        tausche(&text1,&text2);
    
        printf("\n\nx = %s\ny = %s",text1,text2);
        scanf("%i",&i);
    
    }
    

    In Dev-C++ gibt er folgendes aus:

    x = Das ist mein erster Satz.
    y = Das ist mein zweiter Satz.
    
    x = Das ist mein zweiter Satz.
    y = Das ist mein erster Satz.
    

    so wie es sein soll.

    Setze ich das jedoch in Code::Blocks ein erscheint

    x = Das ist mein erster Satz.
    y = Das ist mein zweiter Satz.
    
    x = Das ist mein erster Satz.
    y = Das ist mein zweiter Satz.
    

    Wieso kriege ich 2 unterschiedliche Ergebnisse?



  • Ich erinnere mich dunkel, dass DevCpp ebenso wie (standardmäßig) CodeBlocks den gcc benutzt, es liegen also gar keine Compilerunterschiede vor (allenfalls in der Version).
    Wenn du die Compilerwarnungen mal lesen würdest, wäre dir schon viel geholfen.
    Und wenn du keine Warnungen erhälst, beschaffe sie dir, z.B. beim gcc

    -Wall -ansi -pedantic -Wextra
    

    Arbeite die Warnungen ab, reduziere sie auf 0, und wenn du dann immer noch deiner Meinung nach Programmfehler erhälst, frage wieder nach.
    Der Compiler ist die einfachste und schnellste Testinstanz für deinen Code.



  • Danke Wutz, nachdem ich die Warnungen in Code::Blocks abgearbeitet habe funktioniert es auch hier, peinlicher Fehler für den ich mich entschuldige.


Anmelden zum Antworten