设置了指针参数,但从未使用过警告

and*_*y g 1 c pointers compiler-warnings suppress-warnings keil

我有以下功能:

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

    bar(ptr_2);

    ptr_1 = ptr_2;
}
Run Code Online (Sandbox Code Playgroud)

并得到以下警告:

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

我了解该警告在技术上是正确的,但同时无关紧要。我可以用以下方法抑制它:

(void)(ptr_1)
Run Code Online (Sandbox Code Playgroud)

但是有更好的方法吗?

jua*_*nza 6

这不是无关紧要的警告,因为分配无效。您可以完全ptr_1从代码中删除而不更改其行为。您的代码与此等效:

void foo(char *)
{
  char *ptr_2;
  bar(ptr_2);
}
Run Code Online (Sandbox Code Playgroud)

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

void foo(char **ptr_1)
{
    char *ptr_2;
    bar(ptr_2);
    *ptr_1 = ptr_2;
}
Run Code Online (Sandbox Code Playgroud)

要么

char* foo()
{
    char *ptr_2;
    bar(ptr_2);
    return ptr_2;
}
Run Code Online (Sandbox Code Playgroud)