Ложное предупреждение GCC -Wuninitialized - PullRequest
0 голосов
/ 22 ноября 2018

ОС: Debian 9

компилятор: gcc 8.2.0 (установлен из репозитория buster (testing))

Я знаю, что использование вещей из ветви тестирования debian опасно, но тестирование Debian обычно стабильно , а gcc 8.2 был выпущен как стабильный, поэтому в нем не должно быть много ошибок.

в этой функции:

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;
}

Он сообщает оследующая ошибка (-Wall -Werror, а также -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

Когда я раскомментирую инициализацию, ошибка все еще существует.Я думаю, что это даже не нужно, так как нет условного или чего-либо такого, что когда-либо блокировало бы присвоение action = usr_input();.

Это ложное предупреждение, или это законно?

Я бы сказал, что это ошибка в GCC;это даже нельзя считать ложным.

1 Ответ

0 голосов
/ 22 ноября 2018

Спасибо @MaximEgorushkin за то, что я заметил, что я должен заглянуть внутрь usr_input().

Ошибка в usr_input(), а не в user_tui().

У него очень длинный переключательсо многими переключателями внутри, и в одном из них я забыл запись default:.

Итак, урок: рекурсивно заглянуть внутрь функций, чтобы увидеть, действительно ли они инициализированы.

Я думаю, что gcc должен позволитьнам это известно!

...