Wie geht ihr mit Warnungen um?
-
@SeppSchrott
btw. solltest du gerade die Warnungen ernst nehmen, die bei Konflikten zwischen signed/unsigned hinweisen, da man sich leicht so Integer-Overflow Möglichkeiten in den Code einbaut und die sind noch schwerer zu finden, als Buffer-Overflows!Und sagt mal ehrlich, was ist eigentlich schwer daran, für größen Angaben das Typedef ::std::size_t zu nehmen. Damit umgeht ihr solche Integer-Overflow Probleme und hört keine Warnungen.
-
kingruedi: Die Zahl -1.
-
@MrN
für Fehler gibt es eh Exceptions in C++ :p
und in C kann man entweder std::size_t als Pointer-Parameter nehmen oder wenn man für POSIX-Systeme programmiert einfach ssize_t zur Hilfe nehmen, dass erlaubt dann auch -1
-
SeppSchrot schrieb:
alle paar Codertage räume ich meinen Quelltext auf und dazu gehört natürlich eine Abarbeitung aller Compilerwarnungen, die sich so im Laufe der Zeit angesammelt haben.
bei mir sammeln sich keine.
Eigentlich versuche ich schon konsequent zu sein und alle Warnings vom Level 3 (Visual C++) völlig zu eliminieren.
Nur dazu gehören auch Vorzeichenfehler wie z.B. ,was bei mir sehr oft vorkommt:for (int i=0; i < intvector.size();i++) ...
ich kann zum glück
for (var i=0; i < intvector.size();i++)
schreiben.Noch ein zweites Beispiel:
int m_nNameIndex = m_NameListbox.GetItemData(0); // (hier wird ja eigentlich ein DWORD_PTR zurückgegeben, der aber stets nur als Integer interpretiert wird) //also wär das ja richtiger, aber eben auch fülliger int m_nNameIndex = static_cast<int> (m_NameListbox.GetItemData(0));
jo. casten. aber ob static_cast der richtige ist?
Wie reagiert ihr auf solche Warnungen? Nutzt ihr Pragmas, lasst ihr 5 gerade sein und die Warnungen stehen, oder wärt ihr im oberen Fall gewissenhaft und würdet immer schreiben "unsigned int", da ja der hypothetische Fall auftreten könnte, dass der Vector auf mehr als MAX_INT/2 Einträge anwachsen könnte?
pragmas nutze ich auch. meistens reichen casts. hauptsache, ich kann alle warnungen anschalten und angeschaltet lassen.
-
kingruedi schrieb:
@MrN
und in C kann man entweder std::size_t als Pointer-Parameter nehmen oder wenn man für POSIX-Systeme programmiert einfach ssize_t zur Hilfe nehmen, dass erlaubt dann auch -1ohne warning?
hmm naja man braucht ja nur einen spezialwert (für HIER-TRAG-ICH-KEINEN-WERT-EIN), da geht ja auch unsigned(-1), oder man geht "einfach" in die tiefen von c++ (man kann sich zB eine library für benannte parameter schreiben, wo man dann statt foo(4000 /*pixel*/, DEFAULT_HEIGHT, 20) einfach foo(width(4000) / depth(2)) oder so schreibt)volkard schrieb:
ich kann zum glück
for (var i=0; i < intvector.size();i++)
schreiben.da ich mailinglisten verabscheue kriege ich die sache mit deiner sprache ja leider nicht mit. aber hängt das damit zusammen?
-
Ja gut, manche Warnungen, z.B. die Datenverluste können schon sehr aufschlussreich sein. Aber manchmal finde ich sie eben auch einfach überflüssig.
Z.B. weil man ja bewusst das automatische Typcasting des Compilers nutzen möchte.MaSTaH schrieb:
Ich produziere einfach keinen Code der Warnungen hervorruft...
Das wäre natürlich optimal. Allerdings habe ich schon genug damit zu tun, keine Code zu produzieren, der Fehler hervorruft
Korbinian schrieb:
... aber z.b. ein DWORD_PTR als int zu nehmen, find ich schon etwas fahrlässig...
Wie könnt man das denn umgehen?
Wird ja in dem Fall von der MFC-Methode CListBox::GetItemData(); so geliefert.volkard schrieb:
jo. casten. aber ob static_cast der richtige ist?
Wie würdest du das casten?
EDIT: Der Forums-Parser ist ja ganz schön pissig bei Whitespaces .
Vielleicht sollte man vor der richtigen Post-Erstellung Warnungen erhalten
-
Ich versuche die Warnung zu beheben weil mich stört wen da nicht 0,0 steht^^
-
SeppSchrot schrieb:
Wie würdest du das casten?
ich würde reinterpret_cast vermuten, weil von DWORD* nach int ein static_cast nicht reicht.
-
volkard schrieb:
SeppSchrot schrieb:
Wie würdest du das casten?
ich würde reinterpret_cast vermuten, weil von DWORD* nach int ein static_cast nicht reicht.
Macht er aber.
Denn das _PTR steht nicht, wie man eigentlich annehmen sollte, für Pointer sondern fuer Pointer-Präzision.
-
SeppSchrot schrieb:
Korbinian schrieb:
... aber z.b. ein DWORD_PTR als int zu nehmen, find ich schon etwas fahrlässig...
Wie könnt man das denn umgehen?
Wird ja in dem Fall von der MFC-Methode CListBox::GetItemData(); so geliefert.damit vielleicht:
DWORD_PTR ret = CListBox::GetItemData(...);
mit was sonst?
-
Die einzigen Warnungen die ich für gewöhnlich ignoriere, sind diese:
Verkuerzung von 'const double' in 'float'
-
illuminator schrieb:
Die einzigen Warnungen die ich für gewöhnlich ignoriere, sind diese:
Verkuerzung von 'const double' in 'float'
komisch.
das f bei literalen dranzuhängen ist doch keine arbeit.
-
Bei Visual C++ ignoriere ich:
warning C4355: this': wird in Initialisierungslisten für Basisklasse verwendet