【问题标题】:Pointer parameter was set but never used warning指针参数已设置但从未使用警告
【发布时间】:2015-06-17 09:16:19
【问题描述】:

我有以下功能:

void foo(char *ptr_1)
{
    char *ptr_2;

    bar(ptr_2);

    ptr_1 = ptr_2;
}

并得到这个警告:

参数“ptr_1”已设置但从未使用过

我了解该警告在技术上是正确的,但同时也无关紧要。我可以通过以下方式压制它:

(void)(ptr_1)

但是有更好的方法吗?

【问题讨论】:

  • 但是你为什么要设置它?该警告应该引起您的注意,您可能想做其他事情。我们通常不会在代码中包含对执行没有影响的指令。
  • 编译器试图告诉你函数中的最后一行代码没有意义,也没有任何意义。这个警告怎么可能无关紧要?

标签: c pointers compiler-warnings suppress-warnings keil


【解决方案1】:

这不是一个无关紧要的警告,因为分配没有效果。您可以从代码中完全删除 ptr_1 而不会改变其行为。你的代码相当于这个:

void foo(char *)
{
  char *ptr_2;
  bar(ptr_2);
}

换句话说,函数参数不用于任何事情。如果您打算在调用方更改指针,则需要将指针传递给指针并取消引用它,或者返回新值并让调用方使用其值:

void foo(char **ptr_1)
{
    char *ptr_2;
    bar(ptr_2);
    *ptr_1 = ptr_2;
}

char* foo()
{
    char *ptr_2;
    bar(ptr_2);
    return ptr_2;
}

【讨论】:

  • 非常感谢。我以为我快疯了,当我发现这个时,我立即看到了我做了什么。
【解决方案2】:

我了解该警告在技术上是正确的,但同时也无关紧要。

好吧,这里的代码也是如此。从您的代码的这个角度来看,您可以摆脱违规指令本身。

另外(我个人的看法),处理警告几乎总是比抑制警告更好。毕竟,他们在那里是有原因的。

【讨论】:

  • 我不喜欢some warning。他们很糟糕。
  • @MohitJain 同意。信不信由你,我很久以前就读过你的那个具体问题,这就是为什么我在回答中使用了几乎。 :-)
【解决方案3】:

简单的方法是......

int dClock;//variable initiated without used anywhere.
dClock = dClock;//assign variable to itself to suppress not used warning.

在keil工作过!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-30
    • 2013-01-31
    • 1970-01-01
    • 2023-01-07
    • 2019-01-03
    相关资源
    最近更新 更多