避免在静态常量类上定义但不使用

Avoid defined but not used on static const class

本文关键字:定义 静态 常量      更新时间:2023-10-16

这似乎是一件微不足道的事情,但我不是C++方面的专家,到目前为止,我还没有在网上找到一个好的解决方案。 我怀疑我缺少一些可能解决此问题的基本编码结构。 我的一个主头文件中有以下定义:

static const Foo   INVALID_FOO = {};

其中Foo是一个 POD 类(它没有构造函数,因为它在 C++03 项目的联合中使用(。 这似乎很好,除了包含标题但不使用INVALID_FOO的来源,我收到警告:

error: 'Foo::INVALID_FOO' defined but not used [-Werror=unused-variable]

我尝试删除static但随后得到重复的定义。 我可以将其作为前向声明,并在 .c 文件中定义它,但随后编译器需要通过引用访问它,并且无法进行任何优化。 我还想不禁用-Wall编译器标志。 我想知道是否有一个好方法可以做到这一点?

您可以像这样禁止显示 GCC 警告:

static const Foo INVALID_FOO __attribute__ ((unused)) = {};

请注意,unused在这里是正确的,它所做的只是禁止警告(引用标识符仍然可以(。 还有一个used属性,它禁止显示警告告诉 GCC 在目标文件中发出定义,即使编译器在源代码中看不到对它的引用 - 在大多数情况下,这会导致不必要的代码膨胀。

您可以使用static_cast<void>(INVALID_FOO);语句可移植地禁止显示警告。

还要注意,全局和命名空间范围的static const有点重言式 -const使其static,因此static是多余的。