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


von Günter R. (galileo14)


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

von Karl H. (kbuchegg)


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.

von Matthias (Gast)


Lesenswert?

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

von Günter R. (galileo14)


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?

von Günter R. (galileo14)


Lesenswert?

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

von Johann L. (gjlayde) Benutzerseite


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

von Karl H. (kbuchegg)


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.

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

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

von Günter R. (galileo14)


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

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


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.

von Peter D. (peda)


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

von Give a little bit (Gast)


Lesenswert?

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

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.