[英]Avoid defined but not used on static const class
这似乎是一件微不足道的事情,但是我不是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_cast<void>(INVALID_FOO);
声明。
还要注意,全局和命名空间范围内的static const
有点重言而语const
使它成为static
,所以static
是多余的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.