C 属性: maybe_unused (C23 起)

来自cppreference.com
< c‎ | language‎ | attributes

抑制对未使用实体的警告。

语法

[[ maybe_unused ]]
[[ __maybe_unused__ ]]

解释

此属性能出现在下列实体的声明中:

  • 结构体/联合体struct [[maybe_unused]] S;
  • typedef 名[[maybe_unused]] typedef S* PS;
  • 对象: [[maybe_unused]] int x;
  • 结构体/联合体成员: union U { [[maybe_unused]] int n; };
  • 函数[[maybe_unused]] void f(void);
  • 枚举enum [[maybe_unused]] E {};
  • 枚举项: enum { A [[maybe_unused]], B [[maybe_unused]] = 42 };

若编译器对未使用实体发布警告,则对任何声明为 maybe_unused 的实体抑制该警告。

示例

#include <assert.h>
 
[[maybe_unused]] void f([[maybe_unused]] _Bool cond1, [[maybe_unused]] _Bool cond2)
{
   [[maybe_unused]] _Bool b = cond1 && cond2;
   assert(b); // 发布模式中, assert 被编译掉,而 b 不被使用
              // 无警告,因为它声明为 [[maybe_unused]]
} // 参数 cond1 与 cond2 不被使用,无警告
 
int main(void)
{
    f(1, 1);
}

参阅