Warum Compiler Warnung?



  • also du scheinst mir einen veralteten compiler zu benutzen. ich nehme g++ 3.2 her und bei mir kompiliert er deinen beispielcode ohne warnung. probiers einfach mal mit einer neueren version.

    was auch immer



  • Geo schrieb:

    tolower ist beim g++ ein Macro, dass geschweifte Klammern enthält.

    Ih pfui. Wer macht denn sowas?



  • Geo schrieb:

    tolower ist beim g++ ein Macro, dass geschweifte Klammern enthält. Die darf man in der if-Bedingung so nicht verwenden.

    Aber nicht in halbwegs aktuellen Versionen, das kompiliert bei mir fehlerfrei und ohne Warnungen.



  • Shade Of Mine schrieb:

    der code ist korrekt

    Strenggenommen imo nicht ganz. tolower erwartet als Parameter einen int. Gültige Werte sind entweder EOF oder aber alle Werte, die als unsigned char dargestellt werden können.
    Demzufolge müsste der Code korrekterweise so aussehen:

    if (tolower(static_cast<unsigned char>(wort[i])) != tolower(static_cast<unsigned char>(wort[laenge-1-i])))
    


  • nman schrieb:

    Geo schrieb:

    tolower ist beim g++ ein Macro, dass geschweifte Klammern enthält. Die darf man in der if-Bedingung so nicht verwenden.

    Aber nicht in halbwegs aktuellen Versionen, das kompiliert bei mir fehlerfrei und ohne Warnungen.

    Version 3.2 für ARM. Das Auftreten der Warnung hängt aber auch von den Compileroptionen ab.



  • Geo schrieb:

    Version 3.2 für ARM. Das Auftreten der Warnung hängt aber auch von den Compileroptionen ab.

    Also zumindest für x86 ist 3.2 keineswegs die neueste Version, keine Ahnung wie das bei ARM aussieht.

    Bei mir (i686, gcc-3.3.2 und der ist schon nicht aktuell 😉 ) kompiliert es übrigens mit -Wall und -pedantic ohne Warnungen.



  • ist ja kein Problem des gccs, sondern der libc, die wohl veraltet ist.



  • Weiß gar nicht welche Version das ist, da es der in der Uni ist. Deswegen kann ich ihn auch nicht so einfach erneuern 😉
    Aber danke erstmal für die Tipps.
    Achja, ich habe alle mir bekannten compileroptionen an.



  • HumeSikkins schrieb:

    Shade Of Mine schrieb:

    der code ist korrekt

    Strenggenommen imo nicht ganz. tolower erwartet als Parameter einen int. Gültige Werte sind entweder EOF oder aber alle Werte, die als unsigned char dargestellt werden können.
    Demzufolge müsste der Code korrekterweise so aussehen:

    if (tolower(static_cast<unsigned char>(wort[i])) != tolower(static_cast<unsigned char>(wort[laenge-1-i])))
    

    Funktioniert leider nicht, kommt genau der selbe Fehler..



  • Danielle schrieb:

    HumeSikkins schrieb:

    Shade Of Mine schrieb:

    der code ist korrekt

    Strenggenommen imo nicht ganz. tolower erwartet als Parameter einen int. Gültige Werte sind entweder EOF oder aber alle Werte, die als unsigned char dargestellt werden können.
    Demzufolge müsste der Code korrekterweise so aussehen:

    if (tolower(static_cast<unsigned char>(wort[i])) != tolower(static_cast<unsigned char>(wort[laenge-1-i])))
    

    Funktioniert leider nicht, kommt genau der selbe Fehler..

    Natürlich. Mein Einwand hat auch gar nichts mit deinem syntaktischen Problem zu tun. Mir ging es um die Semantik. Wenn bei dir tolower wirklich ein Makro ist, dass Probleme verursacht, dann bastel einfach noch eine inline-Funktion.


Anmelden zum Antworten