我目前正在收到类似于我在问题标题中提供的警告的编译器警告。警告如......
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。警告是最高级别。
答案 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