首页 > 解决方案 > C 中的 __unused 属性有什么意义?

问题描述

我有个问题。假设您在 C 中定义了一个函数或变量。如果您不使用它,编译器会生成一个警告,指出该变量/函数没有被使用。要抑制警告,请__unused在声明之前使用属性。如果必须使用它,首先声明函数/变量有什么意义?使用有什么好处__unused

标签: cc23

解决方案


__unused通常是扩展为 C 语言扩展的宏。不过,C23 会给我们[[maybe_unused]],标准自带一个例子:

例子

[[maybe_unused]] void f([[maybe_unused]] int i) {
    [[maybe_unused]] int j = i + 100;
    assert(j);
}

鼓励实现不要诊断j未使用的内容,无论是否NDEBUG已定义。

也就是说,assert()宏将在 中展开为空NDEBUG,这意味着编译器会认为j未使用。

当然,另一种方法是将整个j定义(以及可选的用法)放在#ifdef“块”中,但在这种情况下会很麻烦。此外,如果你这样做,那么i将是未使用的,等等。

还有其他用例,例如未使用的函数参数,如果您想保留它们的名称并避免使用(void)x;技巧,在某些情况下处理混淆的优化器/编译器,编译器/链接器看不到的符号的外部使用等。


推荐阅读