static_cast - Wieso ist VisualStudio unzufrieden?

Programmiersprachen, APIs, Bibliotheken, Open Source Engines, Debugging, Quellcode Fehler und alles was mit praktischer Programmierung zu tun hat.
Antworten
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

static_cast - Wieso ist VisualStudio unzufrieden?

Beitrag von starcow »

Abend zusammen :-)

Ich hab hier eine Situation, die ich mir nicht erklären kann.

Code: Alles auswählen

double y = grid * static_cast<double>(i + offset.y)
"i" und "offset.y" sind beides int Variablen.
Visual Studio unterlegt mir diese aber mit einer grünen Wellen-Line und meint:
C26451: Arithmetic overflow: Using operator '+' on a 4 byte value and then casting the result to a 8 byte value. Cast the value to the wider type before calling '+' to avoid overflow.
Soll ich jetzt beide Variablen separat casten und dann zusammen zählen? Ist das nicht etwas unelegant, weil ineffizient? Ich sehe auch nicht ganz, was dass für einen Unterschied machen soll...
Einziger Erklärungsversuch den ich habe:
Wenn die beiden Variablen zusammen addiert grösser als 4294967295 sein sollten, gäbs einen Überlauf, bevor nach "double" gecastet würde.
Nur das Risiko besteht ja ohnehin immer, wenn ich zwei int's addiere.

Gruss starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: static_cast - Wieso ist VisualStudio unzufrieden?

Beitrag von Spiele Programmierer »

Ich glaube, das siehst du schon richtig. Der hypothetische Bug den VS hier bemängelt ist genau dieser Überlauf (und schon bei +2147483647 übrigens).

Man kann das übrigens abschalten unter "Tools" -> "Options" -> "Text Editor" -> "C/C++" -> "Advanced" -> "Code Analysis" -> "Disable C++ Code Analysis Experience" auf "true". Als es noch angeschaltet war, hat auch immer bei mir der Lüfter wie blöd gerödelt.

Relevant:
Bild
Benutzeravatar
starcow
Establishment
Beiträge: 523
Registriert: 23.04.2003, 17:42
Echter Name: Mischa Schaub
Kontaktdaten:

Re: static_cast - Wieso ist VisualStudio unzufrieden?

Beitrag von starcow »

Stimmt! Danke für die Korrektur! :-)
Sollte ich nun dem "Wunsch" von Visual-Studio entsprechen und zwei seperate cast's ausführen - oder wäre das dann Verschwenderisch und unästhetisch?

LG
starcow
Freelancer 3D- und 2D-Grafik
mischaschaub.com
Spiele Programmierer
Establishment
Beiträge: 426
Registriert: 23.01.2013, 15:55

Re: static_cast - Wieso ist VisualStudio unzufrieden?

Beitrag von Spiele Programmierer »

Ich würde das ignorieren. An dem Code ist nichts auszusetzen und wie du schon selbst sagst ist die Alternative sogar objektiv (marginal) schlechter. Ich glaube man kann in den Projekteinstellungen auch irgendwie einzelne Checks deaktivieren. Wenigstens das.

Ansonsten halt einfach beobachten, wie oft die Unterringelung ablenkt vs. wie oft ein Fehler aufgedeckt wird, den man selbst übersehen hätte. Mein persönlicher Eindruck war da jetzt nicht so positiv. Bei einer "offline" statischen Analyse kann man die False Positives wenigstens einfach kurz durchscrollen, aber diese permanenten grünen Unterringelungen finde ich nervig.
Antworten