Ich verwende oft Zuordnung von „längeren“ getippt Variablen „kürzer“ Einsen, zum Beispiel int
zu short
oder uint32_t
zu uint8_t
. Eines Tages beschloss ich, alle diese Fälle mit gcc in meinem Code zu finden, fand aber zu meinem Erstaunen heraus, dass gcc keine Warnungen ausgegeben hat!Keine Warnung auf Zuweisung von int zu kurz (gcc)
int long_value;
short short_value;
std::cin >> long_value; // Example input: 32769
short_value = long_value; // MS Visual Studio complains here at warning level 4
std::cout << "Long: " << long_value << '\n'; // My example output: 32769
std::cout << "Short: " << short_value << '\n'; // My example output: -32767
Mit gcc -Wall
oder gcc -Wconversion
half nicht (gcc aber keine Ausgabe jede Warnung). Tatsächlich gibt es niemals irgendeine Warnung für irgendeinen Eingabe- und Ausgabetyp aus (z. B. long
und unsigned char
).
Ich habe noch nie einen tatsächlichen Fehler in gcc gefunden, also bin ich mir fast sicher, dass dieses Verhalten einen Grund hat.
Warum also keine Warnung?
Update: ich benutze gcc 4.1.2.
@icecrime: GCC muss sicherlich kompilieren. Auf Plattformen, auf denen short kürzer als int ist, sollte und sollte es warnen. –