首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >[[maybe_unused]]用于函数

[[maybe_unused]]用于函数
EN

Stack Overflow用户
提问于 2022-08-16 07:54:16
回答 2查看 138关注 0票数 1

我不太明白函数本身上的[[maybe_unused]]什么时候会有用。

通过读取论文,它只表示该属性可以应用于函数的声明。我的问题是,如果它意味着编译器会对未使用的函数发出警告,那么对于库的任何公共标题,所有东西都应该具有避免警告的属性,因为用户可能只使用库的一部分。

我的理解正确吗?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2022-08-16 08:02:30

这里启发

代码语言:javascript
复制
namespace {
    [[maybe_unused]] void foo() {}
    void bar() {}
}

int main() {}

在未命名命名空间中声明的函数只能在此转换单元中使用,因此编译器可以在不使用函数时发出警告。的确,gcc警告bar (错误是因为-Wall -Werror),但警告是[[maybe_unused]],而不是foo

代码语言:javascript
复制
<source>:5:10: error: 'void {anonymous}::bar()' defined but not used [-Werror=unused-function]
    5 |     void bar() {}
      |          ^~~

活着

上面链接的页面中的原始示例更有启发性,因为它使用条件编译,根据设置的某些符号使用或不使用函数。

票数 6
EN

Stack Overflow用户

发布于 2022-08-16 08:03:37

编译器警告它可以判断是未使用的函数。如果它不确定--如果您的函数最终位于其他人可以调用它的地方,比如在库中--编译器将假定它已被使用。

例如,如果您有一个具有这些函数的翻译单元(参考):

代码语言:javascript
复制
int square(int num) {
    return num * num;
}

static int cube(int num) {
    return num * num * num;
}

square可以由其他翻译单位的其他函数调用。它在这里不使用,但可能在其他地方使用。编译器不知道其他地方,所以它不能将函数标记为未使用的。没有警告;添加属性没有任何效果。

另一方面,cubestatic,所以如果它在任何地方使用,它必须在这个翻译单元中。因为这里没有使用它,所以编译器(至少是gcc-Wunused-function)会对此发出警告。

[[maybe_unused]]添加到cube中,然后沉默该警告。它基本上是说:“我知道你知道这是未使用的,不要警告它。”

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73370550

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档