Czy jest flaga oznaczająca gcc, która powoduje, że konwersje z długiego na krótki będą generować ostrzeżenie o możliwej utracie danych?Czy istnieje ostrzeżenie gcc 4.2 podobne do programu Visual Studio dotyczące możliwej utraty danych?
Pracuję nad aplikacją C++, która jest kompilowana zarówno dla Visual Studio (2005) i GCC 4.2 (dla Mac OS X).
Ostrzeżenia że Visual Studio drukuje się przestrzegać tego wzoru:
: warning C4244: 'argument' : conversion from 'long' to 'short', possible loss of data
Próbowałem -Wconversion, ale to nie jest całkiem to, czego szukam. Jedyne, co udało mi się znaleźć do tej pory, to eksperymentalna flaga - Wcoercion, która jest powiązana z GCC 4.3 (nie jestem pewien, czy chcemy jeszcze zainwestować).
22 kwietnia 2009 @ 11:00 EST Edytuj: Aby wyjaśnić, chcę zobaczyć to ostrzeżenie. Mamy kod, w którym chcemy wiedzieć, kiedy nastąpi utrata danych. Jeśli mam kod:
unsigned long value1 = LONG_MAX;
std::cout << "value1: " << value1 << std::endl;
unsigned short value2 = value1;
std::cout << "value2: " << value2 << std::endl;
otrzymuję ten oczekiwany wynik:
wartosc1: 2147483647
value2: 65535
W naszym kodu, mamy specjalne domagają się wprowadzenia, które wykonają przymus i ostrzeżą nas, jeśli wykonany kod spowodowałby utratę danych. Znaleźliśmy miejsca w naszej dużej bazie kodu za pomocą ostrzeżeń Visual Studio.
Czy istnieje sposób generowania tych ostrzeżeń w gcc 4.2?
Aby sprawdzić możliwą utratę danych, wypróbuj '-Wshorten-64-to-32'. '-Wconversion' sprawdza również pod kątem błędów sygnatury (może być przesadą). – rustyx
'-Wshorten-64-to-32' nie jest akceptowane przez GCC, tylko przez Clang. – Andy