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

the*_*tna 6 c gcc gcc-warning

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

   warning: variable set but not used [-Wunused-but-set-variable]
Run Code Online (Sandbox Code Playgroud)

我提到了这个链接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.
   // } 
Run Code Online (Sandbox Code Playgroud)

caf*_*caf 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
Run Code Online (Sandbox Code Playgroud)

(这假设您仍然想要调用,test_function2()即使CHECK未定义,可能是因为它的副作用 - 如果没有,那么您不需要该#else部分,您可以将两个#ifdef块合并为一个).


pmg*_*pmg 5

设置变量就是给它赋值(可能是隐式的)

int main(void) {
    int local1, local2;
    local1 = 0; /* local1 set to 0 */
    local2 = 0; /* local2 set to 0 */
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

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

    int local2 = local1;
Run Code Online (Sandbox Code Playgroud)

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

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