例如:

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

在c++中,我可以把/*…*/注释参数。当然不是在C中,它会给出错误

错误:参数名称省略


当前回答

从c++ 17开始,[[maybe_unused]]属性可以用来抑制关于未使用参数的警告。

基于OP的示例代码:

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

其他回答

给属性加标签是一种理想的方法。MACRO有时会导致混乱。 通过使用void(x),我们在处理过程中增加了开销。

如果不使用input参数,则使用

void foo(int __attribute__((unused))key)
{
}

如果没有使用函数中定义的变量

void foo(int key)
{
   int hash = 0;
   int bkt __attribute__((unused)) = 0;

   api_call(x, hash, bkt);
}

稍后使用哈希变量作为逻辑,但不需要bkt。定义BKT为未使用,否则编译器说“BKT设置bt未使用”。

注意:这只是为了抑制警告,而不是为了优化。

从c++ 17开始,[[maybe_unused]]属性可以用来抑制关于未使用参数的警告。

基于OP的示例代码:

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

为了记录,我喜欢Job的答案,但我对一个解决方案很好奇,只是在“什么都不做”的语句中使用变量名:

void foo(int x) {
    x; /* unused */
    ...
}

当然,这也有缺点;例如,如果没有“未使用”注释,它看起来就像一个错误,而不是有意的代码行。

这样做的好处是不需要DEFINE,并且消除了警告。

使用GCC的未使用属性:

int foo (__attribute__((unused)) int bar) {
    return 0;
}

gcc/g++特有的抑制源代码块未使用参数警告的方法是用以下pragma语句将其括起来:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wunused-parameter"
<code with unused parameters here>
#pragma GCC diagnostic pop