mikrocontroller.net

Forum: Compiler & IDEs Wie Warnung " differ in signedness" ausschalten?


Autor: Günter R. (galileo14)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Die neueren AVR-GCC's warnen, wenn "-Wall" eingeschaltet ist, vor einer 
falschen Verwendung von z.B. char / unsigned char; es gibt einige 
Optionen, wie man von "-Wall" einzelne Warnungen wegnehmen kann, z.B. 
"-Wno-unused-variable", damit alles außer unbenutzten Variablen 
"abgewarnt" wird.

Aber zum Wegnehmen von Warnungen vor "differing signedness" finde ich 
keinen Schlüssel. Kennt jemand einen solchen? "-Wno-sign-compare" wirkt 
hier nicht.

Vielen Dank für einen Hinweis.

Günter

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Am besten ist es, diese Warnungen durch Änderungen im QUellcode 
wegzubekommen. 'differ in signedness' kann eine harmlose Warnung sein, 
sie kann aber auch durchaus auf einen realen Fehler und ein 
tatsächliches Problem hinweisen.

Autor: Matthias (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Einfachste Lösung ist es einen Cast zu machen, wenn die Warnung 
ignoriert wrden kann (Das muss der Programmierer wissen ;-) )

Autor: Günter R. (galileo14)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Da hast Du auf jeden Fall recht, dies ist mir auch bewußt. Es geht hier 
im wesentlichen um ein Projekt, bei dem Stringdefinitionen und 
Ausgabefunktionen nicht immer ganz sauber bezgl. der Signedness 
programmiert wurden (char und uint9_t vermischt) und das von einer 
älteren WinAVR-Version (die keine signedness-Warnungen ausspuckte) auf 
eine neuere (peniblere) Version umgestellt wurde; hier hätte ich gerne 
diese eine Warnung unterdrückt, damit nicht andere Warnungen in diesen 
untergehen. Code-Änderungen wären recht aufwendig.

Darf ich Deine Antwort so verstehen, daß es keine Möglichkeit gibt, 
diese eine Warnung abzustellen?

Autor: Günter R. (galileo14)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Meine Antwort war primär auf Karl-Heinz gezielt. Aber das mit dem Cast 
geht natürlich auch; ist aber ähnlich aufwendig.

Autor: Johann L. (gjlayde) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Wenn du sicher bist, daß es nur um Ausgabe geht und das Vorzeichen 
wiklich keine Rolle spielt, gibt's zuwas wie -funsigned-char, welche 
default-mässig alle char als unsigned auslegt. Allerdings wird dann bei 
int8_t/char gemeckert ;-)

Ausserdem fliegt das aus der Kurze, wenn wirlich mal das Vorzeichen 
gebraucht wird.

Angestrebte Lösung ist also suberer Code, -funsigned-char ist ne Option 
für Tippfaule, ich persönlich mag und verwende sie nicht.

Johann

Autor: Karl Heinz (kbuchegg) (Moderator)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Günter R. wrote:

> Darf ich Deine Antwort so verstehen, daß es keine Möglichkeit gibt,
> diese eine Warnung abzustellen?

Das weiß ich ehrlich gesagt nicht. Möglich das es was gibt.

> Code-Änderungen wären recht aufwendig.

In den meisten Fällen läuft das auf einen Cast hinaus. Selbst in 
wirklich aufwändigen Projekten ( > 10000 LOC) bin ich noch nie länger 
als 2 Tage bei sowas gesessen.

Und es ist mit Sicherheit besser mal einen Vormittag lang alle 
angemotzten Codestellen zu untersuchen und dann hat man einen sauberen 
Code als einfach die Warnung zu unterdrücken. Ich kanns dir nur ans Herz 
legen, diese Unsauberkeiten zu bereinigen. Man glaubt gar nicht, was 
einem dabei noch so alles im Code auffällt.

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das Einzige, was ich in der man page erstmal finde, ist
-Wnosign-compare.

Autor: Günter R. (galileo14)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Jörg Wunsch wrote:
> Das Einzige, was ich in der man page erstmal finde, ist
> -Wnosign-compare.

Das hatte ich auch schon gefunden, funktioniert aber nicht (soll nur für 
C++ sein).

Aber Karl Heinz hat recht, und Johann auch; ich werde den Code 
"säubern".

Dank an euch!

Günter

Autor: Jörg Wunsch (dl8dtl) (Moderator) Benutzerseite
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Günter R. wrote:

> Das hatte ich auch schon gefunden, funktioniert aber nicht (soll nur für
> C++ sein).

Das verwechselst du mit -Wsign-promo.

> Aber Karl Heinz hat recht, und Johann auch; ich werde den Code
> "säubern".

Das ist natürlich allemal das Sinnvollste.

Autor: Peter Dannegger (peda)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Das blöde an dieser Warnung ist, daß sie sehr "unsauber" ist.

Sie erfolgt nur bei char Strings, wo das Vorzeichen wurscht ist (es gibt 
keine negativen Buchstaben).

Bei char Variablen, wo es eine Rolle spielen könnte, weil damit 
gerechnet wird, erfolgt dagegen keine Warnung.

Diese Warnung suggeriert einem also Probleme bzw. Sicherheit an den 
völlig falschen Stellen.


Man hätte diese Warnung entweder konsequent implementieren sollen oder 
besser ganz sein lassen.


Peter

Autor: Give a little bit (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
> uint9_t
Einen 9 Bit Integer, wie oft habe ich das schon vermisst ;-)

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.