虚假警告 gcc -Wuninitialized

Spurious warning gcc -Wuninitialized

OS:Debian 9

编译器:gcc 8.2.0(从 buster(测试)存储库安装)

我知道使用 debian testing 分支的东西是危险的,但是 debian testing 通常是稳定的,并且 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 中的一个错误;它甚至不能被认为是虚假的。

感谢@MaximEgorushkin 指出我应该看看里面 usr_input()

错误在 usr_input() 而不是 user_tui()

它有一个很长的开关,里面有很多开关,其中一个我忘记了 default: 条目。

所以教训:递归地查看函数内部,看看它们是否真的被初始化了。

我认为 gcc 应该让我们知道!