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
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.
Einfachste Lösung ist es einen Cast zu machen, wenn die Warnung ignoriert wrden kann (Das muss der Programmierer wissen ;-) )
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?
Meine Antwort war primär auf Karl-Heinz gezielt. Aber das mit dem Cast geht natürlich auch; ist aber ähnlich aufwendig.
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
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.
Das Einzige, was ich in der man page erstmal finde, ist -Wnosign-compare.
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
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.
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
> 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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.