警告在使用参数标记为__unused(Warn when using parameter marke

2019-08-08 01:47发布

使用-Wunused参数标志,你可以强制__unused未使用的参数,作为一个编译器优化。 下面的代码将导致两个警告:

#include <stdio.h>
int main(int argc, char **argv) {
  printf("hello world\n");
  return 0;
}

这些警告是通过添加__unused未使用的参数固定。

#include <stdio.h>
int main(int __unused argc, char __unused **argv) {
  printf("hello world\n");
  return 0;
}

当您使用参数标__unused,铛4.1不会警告或错误。

#include <stdio.h>
int main(int __unused argc, char __unused **argv) {
  printf("hello world. there are %d args\n", argc);
  return 0;
}

相同的行为是使用表现出__attribute__((unused))

int main(int __attribute__((unused)) argc, char __attribute__((unused)) **argv) {

有没有一种方法,以警告或错误的__unused? 会发生什么,你应该小心留下__unused上使用的参数? 在上面的例子中argc似乎有正确的价值,尽管它可能是编译器不采取暗示的优势,并没有更多的了解,我不会依赖于这种行为。

Answer 1:

__unused属性是为了防止投诉时,函数的参数/方法或函数/方法是不使用的,不执行他们缺乏使用。

在所用的术语GCC手册是:

此属性,附于函数时,意味着该函数是指可能不会被使用

和变量 :

此属性,连接到一个变量,表示该变量是指可能不会被使用。

最常见的用途是针对一个接口的开发 - 例如回调,在这里你可能会被迫接受几个参数,但是不要使用所有这些的。

我用了一点,当我在做测试驱动开发-我最初的日常需要一些参数,什么也不做,所以所有参数采取__attribute__((unused)) 当我开发它,我使用的参数。 在开发结束时,我从方法删除它们,看看有什么动摇了。



Answer 2:

对皮肤这只猫的另一种方法是删除(或注释掉)参数的名称。

int main ( int argc, char ** /* argv */ ) {
    printf("hello world. there are %d args\n", argc);
    return 0;
}

现在,编译器不会发出警告argv未被使用,你可以不使用它,因为它没有名字。



文章来源: Warn when using parameter marked as __unused
标签: c clang