2011-01-02 5 views
5

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.

+0

@icecrime: GCC muss sicherlich kompilieren. Auf Plattformen, auf denen short kürzer als int ist, sollte und sollte es warnen. –

Antwort

5

Ich kann das nicht reproduzieren. Kompilieren diesen Code mit gcc 4.4.5 mit -Wconversion, bekomme ich

a.cc: In function ‘void f()’: 
a.cc:7: warning: conversion to ‘short int’ from ‘int’ may alter its value 
+0

Ja, ich auch mit 4.5.2 -Wwandlung. –