警告:变量集但未使用[-Wunused-but-set-variable]

时间:2011-08-18 22:52:19

标签: c gcc gcc-warning

我在gcc 4.6.1编译C源代码时遇到了警告。

   warning: variable set but not used [-Wunused-but-set-variable]

我参考了这个链接Wunused,但可能会得到导致此警告的确切内容。有人会告诉我更多细节是什么导致了此警告,我们如何摆脱它?

[编辑]  我有一小段代码。编译显示上述警告。你能建议我怎么纠正它?

   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.
   // } 

5 个答案:

答案 0 :(得分:6)

您需要在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_function2()来调用CHECK,即使没有定义#else,大概是因为它的副作用 - 如果没有,那么你不需要#ifdef部分,您可以将两个{{1}}块合并为一个。)

答案 1 :(得分:4)

设置变量是为其赋值(可能是隐含的)

int main(void) {
    int local1, local2;
    local1 = 0; /* local1 set to 0 */
    local2 = 0; /* local2 set to 0 */
    return 0;
}

在上面的程序中,两个变量都设置为一个值,但没有使用它们。 如果我用

替换第二行
    int local2 = local1;

现在我使用了local1变量 - 警告应该只有1。

要删除警告,请从代码中删除分配。这可能会产生其他警告...... :)

答案 2 :(得分:2)

这意味着您为变量赋值,但之后您永远不会在代码中读取该值(因此,verbage,“set but not used”)。例如:

int useful = 10;
int useless = 3;
if (useful) {
    //Do stuff
}

请注意,您同时提供usefuluseless值,但只读取useful中的值。 通常,当我收到此消息时,这意味着我忘记了变量或找到了一种内联不再需要该变量的语句的方法。

答案 3 :(得分:1)

使用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-variable等。

答案 4 :(得分:0)

您尚未使用过BoolTest。您可以看到代码和

之间没有区别
test_function(){
#ifdef CHECK
if (!test_fucntion2()) {