boost :: system ::(...)_ category定义但未使用

时间:2009-11-29 03:26:28

标签: c++ boost compiler-warnings unused-variables

我目前正在收到类似于我在问题标题中提供的警告的编译器警告。警告如......

warning: 'boost::system::generic_category' defined but not used

warning: 'boost::system::posix_category' defined but not used

warning: 'boost::system::errno_ecat' defined but not used

warning: 'boost::system::native_ecat' defined but not used

据我所知,该计划没有受到任何影响。但是,我不喜欢挂着警告,但我不知道这些警告试图告诉我什么,除了那些定义和与boost相关的东西悬挂在某个没有被使用的地方。但是,我已经定义的所有东西,我都用过了。我正在使用的boost库是随机库和文件系统库。

当我检查警告的来源时,它会显示Boost的error_category.hpp文件,并突出显示被评为“预定义错误类别”或“已弃用的同义词”的一些static const。也许这个问题与我在使用库时的错误处理(或缺少)有关?

任何人都可以就这些警告突然出现的原因提供一些见解吗?我完全错过了什么吗?

P.S。警告是最高级别。

3 个答案:

答案 0 :(得分:21)

我同意@Charles Salvia,但是至少在Boost 1.44.0中添加了这些定义,这些定义现在已被包装 - 被排除在已弃用之外。因此,如果您不使用它们,请在包含头文件之前包含以下行:

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif

答案 1 :(得分:7)

这与Boost.System库中的error_code库有关。 Boost error_codes包含两个属性:值和类别。为了使error_codes可扩展以便库用户可以设计自己的错误类别,boost设计人员需要某种方式来表示唯一的错误代码类别。一个简单的ID号是不够的,因为这可能导致两个项目使用冲突的ID号来表示自定义错误类别。

基本上,他们所做的是以从基类error_category继承的静态对象的形式使用内存地址。除了用作特定错误类别的唯一标识符之外,这些变量实际上不会执行任何操作。因为它们本质上是内存中具有唯一地址的静态虚拟对象,所以您可以轻松创建自己的自定义错误类别,这些类别不会干扰其他错误类别“ID”。有关详细信息,请参阅here

我想你所看到的是这个设计决定的副作用。由于这些变量从未在程序中实际使用过,因此编译器会生成警告。我只想说,我认为你做错了什么。

答案 2 :(得分:1)

我尝试了@ M.Tibbits建议的BOOST_SYSTEM_NO_DEPRECATED,它似乎删除了一些警告实例(在linux下构建的大系统中),但不是全部。

但是,使用-isystem代替-I来包含提升标题(并忽略他们的问题)对我有用。

建议https://exceptionshub.com/how-do-you-disable-the-unused-variable-warnings-coming-out-of-gcc.html

由GNU GCC解释(倾斜):http://gcc.gnu.org/onlinedocs/gcc/Directory-Options.html