C 警告:变量已设置但未使用[-Wunused但已设置变量]
在编译GCC4.6.1中的C源代码时,我收到了以下警告C 警告:变量已设置但未使用[-Wunused但已设置变量],c,gcc,gcc-warning,C,Gcc,Gcc Warning,在编译GCC4.6.1中的C源代码时,我收到了以下警告 warning: variable set but not used [-Wunused-but-set-variable] 我参考了这个链接,但可以得到这个警告的确切原因。有谁能告诉我更多的细节是什么导致了这个警告,我们如何才能摆脱它 [编辑] 我有一段代码。编译显示上述警告。你能告诉我怎么改正吗 test_function(){ BOOL BoolTest; BoolTest = test_fucntion2(
warning: variable set but not used [-Wunused-but-set-variable]
我参考了这个链接,但可以得到这个警告的确切原因。有谁能告诉我更多的细节是什么导致了这个警告,我们如何才能摆脱它
[编辑]
我有一段代码。编译显示上述警告。你能告诉我怎么改正吗
test_function(){
BOOL BoolTest;
BoolTest = test_fucntion2();
#ifdef CHECK
if (!BoolTest) {
misc_StartErrorReport();
misc_ErrorReport("\n test_function2: Input not indexed.\n");
misc_FinishErrorReport();
}
#endif
//
BoolTest is no more used below it.
// }
设置变量就是给它赋值(可能是隐式的) 在上面的程序中,两个变量都设置为一个值,但没有使用。 如果我将第二行替换为
int local2 = local1;
现在我已经使用了local1
变量——警告应该只有1
要消除警告,请从代码中删除分配。这反过来可能会产生其他警告…:) 这意味着您将一个值赋给一个变量,但以后在代码中永远不会读取该值(因此使用了“设置但未使用”)。例如:
int useful = 10;
int useless = 3;
if (useful) {
//Do stuff
}
请注意,您同时给出了有用的
和无用的
值,但您只读取有用的
中的值。
通常,当我收到此消息时,这意味着我忘记了某个变量,或者找到了一种方法来内联不再需要该变量的语句。您需要在
BoolTest的声明和初始化周围包含预处理器保护:
test_function()
{
#ifdef CHECK
BOOL BoolTest = test_function2();
#else
test_function2();
#endif
#ifdef CHECK
if (!BoolTest) {
misc_StartErrorReport();
misc_ErrorReport("\n test_function2: Input not indexed.\n");
misc_FinishErrorReport();
}
#endif
(这假设您仍然希望调用test\u function2()
,即使没有定义CHECK
,可能是因为它的副作用-如果没有,那么您就不需要#else
部分,您可以将两个#ifdef
块组合成一个块)。您没有使用BoolTest。您可以看到您的代码和
test_function(){
#ifdef CHECK
if (!test_fucntion2()) {
使用g++7.x及更高版本和clang++4.x及更高版本(使用c++11或更高版本),
与Visual Studio 2017 15.3版及更高版本(可与/std:c++17一起使用)一样,您也可以使用标准化的[[maybe_unused]]属性
比如说,
int main()
{
int x [[maybe_unused]] = 5;
}
不会给出警告,即使使用-Wunused变量等也不会
int main()
{
int x [[maybe_unused]] = 5;
}