[C] Compiler warnings auflösen

  • hum

    was kann ich gegen diese Fehlermeldung tun?

    Zitat

    sample.c:42: Warnung: Zeigerziele bei Übergabe des Arguments 1 von »ora_oci_query« unterscheiden sich im Vorzeichenbesitz


    deutsche Compilermeldungen tun weh.

    Ursache ist die Funktion

    Code
    int ora_oci_query(text *q);

    in den oci headerfiles findet sich:

    Code
    typedef oratext text;
    typedef unsigned char oratext;

    Aufrufen tu ich die Funktion so:

    Code
    ora_oci_query("SELECT blah FROM foo;");

    Was kann ich nun tun um diese warnings wegzubekommen?

    I like Toast!

  • hatte so eine ähnliche Warnung bei Funktionen der libxml2...

    du könntest folgendes probieren:

    Code
    ora_oci_query((unsigned char *)"SELECT blah FROM foo;");

    bzw.

    Code
    ora_oci_query((text *)"SELECT blah FROM foo;");

    hat meine warnings damals eliminiert

  • Aber ist das gscheit?

    Das sowas die Warnings wegbringt is mir klar, aber ob es das richtige im Code tut weiß ich nicht.

    Auf den Punkt gebracht würd ich sagen dass gcc aus "bla bla bla" ein char array macht und die library die ich verwende (Oracles OCI Library) dafür den Typ unsigned char verwendet.

    I like Toast!

  • Ichs habs nun mit entsprechenden casts gelöst, aber ich frag mich schno grad was das genau bewirkt.

    Evt mags ja wer erklären, ich schaffs heut zumindest nimmer das nachzuschaun weil mir nach 8h Computerarbeit nun bereits die Augen a bissal bluten.

    I like Toast!

  • Die Interpretation von char ist nicht im C-Standard definiert und daher plattform-spezifisch. -fsigned-char bzw. -funsigned-char stellen beim gcc ein ob char signed oder unsigned interpretiert wird und sollten dein Problem ohne Casts beheben, sofern der restliche Code konsistent in der Verwendung von signed und unsigned char ist.

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

  • Ichs habs nun mit entsprechenden casts gelöst, aber ich frag mich schno grad was das genau bewirkt.


    Vielleicht tut der Cast gar nichts, wahrscheinlich tut er aber gar nichts.

    Also. Per Definition ist char in allen Eigenschaften völlig identisch mit signed char oder unsigned char. Welches, das weiß man nicht. Aber:

    • Vielleicht ist bei dir gerade char == unsigned char, dann tut der Cast gar nichts und kann somit auch keine negativen Auswirkungen haben.
    • Wahrscheinlich macht es auch nix, wenn bei dir char == signed char ist. Die Bitmuster einander entsprechender Zeichen in signed/unsigned char sind gleich (das könnte ich glaub ich mit Hilfe des Standards beweisen, wenn es sein muß). Daher kann man bei der Verwendung der Zeichen als Zeichen keinen Effekt sehen. Wenn sie mit ihren Strings rechnen, ist die Lage aber eine andere.

    Die Interpretation von char ist nicht im C-Standard definiert und daher plattform-spezifisch. -fsigned-char bzw. -funsigned-char stellen beim gcc ein ob char signed oder unsigned interpretiert wird und sollten dein Problem ohne Casts beheben, sofern der restliche Code konsistent in der Verwendung von signed und unsigned char ist.


    Nein, char ist ein eigener Typ, auch wenn die Darstellung zu einem der beiden anderen Typen identisch ist. Daher sind die Pointertypen auch unterschiedlich, und da gibts in C keine stillen Umwandlungen außer bei void *. GCC warnt hier überhaupt nur mit -ansi -pedantic, dann aber korrekterweise auch mit -f(un)signed-char.

    *plantsch*

  • Natürlich hast du da wieder einmal recht. (Note to self: Auch die Fußnoten lesen.)

    Why bother spending time reading up on things? Everybody's an authority, in a free land.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!