避免定义但不在静态const类

时间:2017-07-26 13:45:49

标签: c++ gcc g++

这似乎是一件微不足道的事情,但我不是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编译器标志。我想知道是否有一个很好的方法来做到这一点?

2 个答案:

答案 0 :(得分:3)

你可以这样压制GCC警告:

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

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

答案 1 :(得分:0)

您可以使用static_cast<void>(INVALID_FOO);声明轻松取消警告。

另请注意,static const在全局范围和命名空间范围内有点重复 - const使其成为static,因此static是多余的。