2011-01-02 12 views
5

często używam przypisanie „już” wpisane zmienne „krótsze” jedynki, na przykład int do short lub uint32_t do uint8_t. Pewnego dnia postanowiłem znaleźć wszystkie takie przypadki w moim kodzie za pomocą gcc, ale ku mojemu zaskoczeniu odkryłem, że gcc nie wyświetla żadnych ostrzeżeń!Brak ostrzeżenia o cesji int do krótkiego (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 

Korzystanie gcc -Wall lub gcc -Wconversion nie pomogło (gcc nie wyjście żadnego ostrzeżenia). W rzeczywistości nigdy nie generuje żadnego ostrzeżenia dla żadnego typu wejścia i wyjścia (na przykład long i unsigned char).

Nigdy nie znalazłem faktycznego błędu w gcc, więc jestem prawie pewien, że to zachowanie ma powód.

Dlaczego więc nie ma ostrzeżenia?

Aktualizacja: korzystam z gcc 4.1.2.

+0

@icecrime: gcc na pewno musi go skompilować. Na platformach, gdzie krótki jest krótszy niż int, powinien i ostrzega. –

Odpowiedz

5

Nie mogę tego odtworzyć. Kompilacja ten kod z gcc 4.4.5 z -Wconversion, mam

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

Tak, ja też z 4.5.2 -Wkonwersja. –

Powiązane problemy