避免在静态常量类上定义但不使用
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 const
有点重言式 -const
使其static
,因此static
是多余的。
相关文章:
- 如何在C++中定义静态成员结构
- 如何在基类中定义静态接口,并确保该接口必须在派生类中实现
- 仅使用宏在标头中定义静态变量
- C++ dll 定义静态成员
- C++类中定义静态对象
- 如何从具有专用化的类模板定义静态成员变量?
- 为什么必须在C++中定义静态数据成员?
- 通过呼叫constexpr函数来定义静态constexpr成员
- 'class MyClass' 在尝试定义静态结构实例时不会命名类型
- 具有静态模板类成员的模板类:如何定义静态成员
- 定义静态类字段时多个已定义符号的链接器错误
- 为什么在定义静态成员变量时不遵循定义顺序
- 我们可以在构造函数中定义静态类成员吗?
- 无法使用 CMake 变量PROJECT_SOURCE_DIR定义静态库的绝对路径
- 源文件中定义静态原子变量不好
- 如何链接自定义静态库
- 为什么在 linux 信号事件中未定义静态成员的使用
- 在类外部定义静态匿名枚举
- 在类声明中定义静态变量时未解析的外部符号
- 在 main.cpp 以外的文件中定义静态数组