System operacyjny: Debian 9
Kompilator: gcc 8.2.0 (zainstalowany z repozytorium buster (testowego))
Wiem, że używanie rzeczy z gałęzi testowej Debiana jest niebezpieczne, ale testowanie Debiana jest zazwyczaj stabilne, a gcc 8.2 zostało wydane jako stabilne, więc nie powinno zawierać wielu błędów.
W tej funkcji:
int user_tui (const char *title, const char *subtitle)
{
int action;
// action = USER_IFACE_ACT_FOO;
show_help();
user_tui_show_log(title, subtitle);
action = usr_input();
return action;
}
Zgłasza następujący błąd (-Wall -Werror
, a także -O3 -march=native
):
/.../modules//user//src//user_tui.c: In function ‘user_tui’:
/.../modules//user//src//user_tui.c:91:9: error: ‘action’ may be used uninitialized in this function [-Werror=maybe-uninitialized]
return action;
^~~~~~
cc1: all warnings being treated as errors
Kiedy odkomentuję inicjalizację, błąd nadal występuje. Myślę, że nie powinno to być nawet potrzebne, ponieważ nie ma żadnego warunkowego ani niczego, co mogłoby zablokować przypisanie action = usr_input();
.
Czy to fałszywe ostrzeżenie, czy jest to uzasadnione?
Powiedziałbym, że to błąd w gcc; nie można tego nawet uznać za fałszywe.
1 odpowiedź
Dziękuję @MaximEgorushkin za informację, że powinienem zajrzeć do środka usr_input()
.
Błąd znajduje się w usr_input()
, a nie w user_tui()
.
Ma bardzo długi przełącznik z wieloma przełącznikami w środku, a w jednym z nich zapomniałem wpisu default:
.
A więc lekcja: zajrzyj rekursywnie do funkcji, aby zobaczyć, czy są naprawdę zainicjalizowane.
Myślę, że gcc powinno nas o tym poinformować!
Podobne pytania
Nowe pytania
gcc
GCC to kolekcja kompilatorów GNU. Jest to de facto standardowy kompilator C, C ++, Go, Fortran i Ada w systemie Linux, a także obsługuje wiele innych języków i platform.