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