Warum keine Warnung bei unterschiedlichen Varablengrößen
-
Hi,
ich verwende Visual Studio 2008 mit folgendem C++ Code:
#include <iostream> using namespace std; int main() { short s = 10; unsigned short us = 11; int i = 32769; unsigned int ui = 13; long l = 14; unsigned long ul = 15; long long ll = 16; unsigned long long ull = 17; float f = 7.2f; double d = 8.7; char c = 'a'; s = i; //Diese Zeile cout << s; return 0; }
Warum gibt es bei der markierten Zeile keine Warnung des Compilers bei der Übersetzung, obwohl mit der Ausgabe von -32767 eindeutig zu erkennen ist, dass ein Überlauf stattgefunden hat? (0 Fehler, 0 Warnung(en))
Nach dem wie ich es verstanden hatte, hätte doch ein expliziter Cast notwendig sein müssen .
-
Du musst das Warning-Level umstellen, dann bekommst du auch eine Warnung:
Warning 1 warning C4244: '=' : conversion from 'int' to 'short', possible loss of data
Allerdings warnt er nicht vor einen Überlauf, sondern vor einem Informationsverlust.In Visual Studio solltest du das einstellen:
Configuration Properties - C/C++ - Warning Level=Level4(/W4)
Nimm aber nicht
EnableAllWarnings
, da bekommst du unter Umständen irgendwann Probelem, ich weiß nicht mehr genau wo das war. Auf jeden Fall erkennt er dann manchmal Warning, wo keine sind.
-
Im Übrigen hast du noch zwei Datentypen vergessen in deiner Liste:
unsigned char
signed char
:p
-
Unter GCC ist das Flag -W-sign-conversion für obige Fälle da (nur so nebenbei).
-
Anfänger2012 schrieb:
ich verwende Visual Studio 2008
Sone schrieb:
Unter GCC ...
-1
-
In Visual Studio solltest du das einstellen:
Configuration Properties - C/C++ - Warning Level=Level4(/W4)Ja! Jetzt funktioniert es so, wie ich es mir vorgestellt habe.