C中的“未使用的参数”警告

在C代码中抑制未使用的参数警告的最佳方法是什么?

例如,

Bool NullFunc(const struct timespec *when, const char *who)
{
   return TRUE;
}

在C ++中,我能够在参数中加入/*...*/注释。 但当然不是。

它给了我error: parameter name omitted


我通常写这样一个宏:

#define UNUSED(x) (void)(x)

你可以使用这个宏来处理所有未使用的参数。 (请注意,这适用于任何编译器。)

例如:

void f(int x) {
    UNUSED(x);
    ...
}

在gcc中,您可以unused属性标记参数。

该属性附加到变量上,意味着该变量可能未被使用。 GCC不会为这个变量产生警告。

实际上,这是通过在参数后面放置__attribute__ ((unused))完成的。 例如

auto lambda = [](workerid_t workerId) -> void { };

auto lambda = [](__attribute__((unused)) _workerid_t workerId) -> void { } ;

你可以使用gcc / clang的未使用的属性,但是我在头文件中使用这些宏以避免在源代码中使用gcc特定属性,而且__attribute__在每个地方都有点冗长/丑陋。

#ifdef __GNUC__
#  define UNUSED(x) UNUSED_ ## x __attribute__((__unused__))
#else
#  define UNUSED(x) UNUSED_ ## x
#endif

#ifdef __GNUC__
#  define UNUSED_FUNCTION(x) __attribute__((__unused__)) UNUSED_ ## x
#else
#  define UNUSED_FUNCTION(x) UNUSED_ ## x
#endif

那你可以做...

void foo(int UNUSED(bar)) { ... }

我更喜欢这样做,因为如果您尝试在代码中使用代码bar出现错误,那么您不能错误地保留该属性。

和功能...

static void UNUSED_FUNCTION(foo)(int bar) { ... }

注1):
据我所知,MSVC没有等效于__attribute__((__unused__))

笔记2):
UNUSED宏不适用于包含括号的参数,
所以如果你有像float (*coords)[3]这样的参数float (*coords)[3]不能这样做,
float UNUSED((*coords)[3])或者float (*UNUSED(coords))[3] ,这是我发现的UNUSED宏的唯一缺点,在这些情况下,我退回到(void)coords;

链接地址: http://www.djcxy.com/p/73615.html

上一篇: "unused parameter" warnings in C

下一篇: How do I best silence a warning about unused variables?