1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

[C] Compiler warnings auflösen

    • Frage
  • davewood
  • 28. Januar 2008 um 14:55
  • Unerledigt
  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 28. Januar 2008 um 14:55
    • #1

    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!

  • Daedalus
    10
    Daedalus
    Mitglied
    Reaktionen
    4
    Punkte
    949
    Beiträge
    172
    • 28. Januar 2008 um 15:16
    • #2

    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

    [RIAA Radar]

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 28. Januar 2008 um 15:18
    • #3

    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!

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 28. Januar 2008 um 16:45
    • #4

    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!

  • jeuneS2
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    Punkte
    1.227
    Beiträge
    238
    • 28. Januar 2008 um 20:15
    • #5

    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.

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 28. Januar 2008 um 20:27
    • #6
    Zitat von davewood

    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.
    Zitat von jeuneS2

    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*

  • jeuneS2
    11
    jeuneS2
    Mitglied
    Reaktionen
    17
    Punkte
    1.227
    Beiträge
    238
    • 28. Januar 2008 um 22:24
    • #7

    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.

  • davewood
    17
    davewood
    Mitglied
    Reaktionen
    9
    Punkte
    3.204
    Beiträge
    536
    • 29. Januar 2008 um 09:05
    • #8

    Danke für den Input.

    Kann man meine Lösung mit casts nun als halbwegs sauber betrachten?

    I like Toast!

  • Plantschkuh!
    24
    Plantschkuh!
    Mitglied
    Reaktionen
    163
    Punkte
    6.173
    Beiträge
    1.181
    • 29. Januar 2008 um 09:30
    • #9

    Ja.

    *plantsch*

  • Maximilian Rupp 27. Dezember 2024 um 12:04

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

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

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung