C 中的 __unused 属性有什么意义?

What's the point of the __unused attribute in C?

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

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

EXAMPLE

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

Implementations are encouraged not to diagnose that j is unused, whether or not NDEBUG is defined.

assert()宏在NDEBUG中会展开为空,也就是说编译器会认为j没有被使用

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

还有其他用例,例如未使用的函数参数,如果您想保留它们的名称并避免 (void)x; 技巧,在某些情况下处理混乱的 optimizer/compiler,符号的外部使用不能被compiler/linker等

看到