虚假警告 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 应该让我们知道!
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 应该让我们知道!