7

我在编译 C 源代码时收到以下警告gcc 4.6.1

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

5 回答 5

7

您需要在声明和初始化周围包含预处理器保护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块合并为一个)。

于 2011-08-19T04:57:58.383 回答
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。

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

于 2011-08-18T22:56:38.937 回答
2

这意味着您为变量分配了一个值,但是您以后再也不会在代码中读取该值(因此是措辞,“设置但未使用”)。例如:

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

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

于 2011-08-18T22:56:48.680 回答
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 等,也不会发出警告。

于 2018-06-05T17:13:43.980 回答
0

You have not used BoolTest. You can see there is no difference between your code and

test_function(){
#ifdef CHECK
if (!test_fucntion2()) {
于 2011-08-23T14:02:52.203 回答