Poniżej znajduje się kilka oczywiście wadliwego kodu, dla którego myślę, że kompilator powinien wydać komunikat diagnostyczny. Ale ani gcc
ani g++
robi, nawet ze wszystkimi opcjami ostrzeżeń mogłem pomyśleć: -pedantic -Wall -Wextra
Czy mogę napisać GCC ostrzegając o przekazywaniu zbyt szerokich typów do funkcji?
#include <stdio.h>
short f(short x)
{
return x;
}
int main()
{
long x = 0x10000007; /* bigger than short */
printf("%d\n", f(x)); /* hoping for a warning here */
return 0;
}
Czy istnieje sposób, aby gcc
i g++
ostrzec o tym? Na marginesie, czy masz inny kompilator, który ostrzega o tym domyślnie lub w dość powszechnej konfiguracji z ostrzeżeniami?
Uwaga: Używam GCC (kompilatory C i C++) w wersji 4.2.4.
Edit: Właśnie okazało się, że gcc -Wconversion
załatwia sprawę, ale ta sama opcja g++
nie robi, a ja naprawdę za pomocą C++ tutaj, więc muszę rozwiązanie g++
(i jestem teraz zastanawiasz się, dlaczego -Wconversion
robi” wydaje się, że to jest).
Edytuj: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=34389 sugeruje, że może to być naprawione w g++ 4.4
... może? Nie jest dla mnie jasne, czy to ten sam problem i/lub czy poprawka rzeczywiście nadchodzi w tej wersji. Może ktoś z 4.3 lub 4.4 może spróbować mojego testu.
Aha - więc to tylko to, że 4.2.4 jest zbyt "stary", aby ostrzec tak jak powinno, a 4.3.2 działa (robię tutaj kilka założeń, ale myślę, że można bezpiecznie powiedzieć, że używam Ubuntu i widziałem kilka uwag na temat, które sprawiają, że wydaje się rozsądne myślenie, że to jest po prostu coś naprawiono w wersji 4.3+: –
Próbowałem już z GCC 4.3.2 na maszynie Ubuntu Intrepid, a -Wconversion robi to, co chcę.Horay, ale boo dla 4.2.4 nie działa.nie ma znaczenia: –
brakujące wzmianki o -Wign -konwersja dla g ++ (wymagana przynajmniej w nowszych wersjach) ... – codeling