boost::system::()_category определена, но не используется

В настоящее время я получаю предупреждения компилятора, которые напоминают предупреждение, которое я дал в заголовке вопроса. Предупреждения, такие как ....

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

Насколько я знаю, программа никак не затрагивается. Тем не менее, мне не нравятся предупреждения, висящие вокруг, но я понятия не имею, что эти предупреждения пытаются мне сказать, кроме того, что что-то определенное и связанное с повышением зависает где-то и не используется. Однако все, что я определил, я использовал. Библиотеки повышения, которые я использую, — это библиотека random и библиотека файловой системы.

Когда я проверяю источник предупреждения, он открывает файл error_category.hpp Boost и выделяет некоторые static const, которые прокомментированы либо как «предопределенные категории ошибок», либо как «устаревшие синонимы». Может быть, проблема как-то связана с моей обработкой ошибок (или ее отсутствием) при использовании библиотеки?

Может ли кто-нибудь дать некоторое представление о том, почему эти предупреждения появляются? Я что-то совсем упустил?

P.S. Предупреждения на максимальном уровне.


person Anonymous    schedule 29.11.2009    source источник


Ответы (3)


Это относится к библиотеке error_code в библиотеке Boost.System. Коды ошибок Boost содержат два атрибута: значения и категории. Чтобы сделать error_codes расширяемым, чтобы пользователи библиотеки могли создавать свои собственные категории ошибок, разработчикам повышения необходимо было каким-то образом представить уникальную категорию кодов ошибок. Простого идентификационного номера будет недостаточно, потому что это может привести к тому, что два проекта будут использовать конфликтующие идентификационные номера для пользовательских категорий ошибок.

По сути, они использовали адреса памяти в виде статических объектов, которые наследуются от базового класса error_category. Эти переменные на самом деле ничего не делают, кроме как служат уникальными идентификаторами определенной категории ошибок. Поскольку они по сути являются статическими фиктивными объектами с уникальными адресами в памяти, вы можете легко создавать свои собственные настраиваемые категории ошибок, которые не будут мешать «идентификаторам» других категорий ошибок. Подробнее см. здесь. .

Я предполагаю, что то, что вы видите, является побочным эффектом этого дизайнерского решения. Поскольку эти переменные фактически никогда не используются в вашей программе, компилятор генерирует предупреждения. Достаточно сказать, я не думаю, что вы делаете что-то неправильно.

person Charles Salvia    schedule 29.11.2009
comment
У меня та же проблема, но мой компоновщик не завершает работу, так что, насколько я вижу, это выглядит большой проблемой. - person Rhubarb; 29.08.2010

Я согласен с @Charles Salvia, но хотел добавить, что, по крайней мере, начиная с Boost 1.44.0, эти определения теперь завернуты - их следует исключить как устаревшие. Поэтому, если вы их не используете, просто включите следующие строки перед включением файла заголовка:

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif
person M. Tibbits    schedule 17.09.2010
comment
Я определяю это, но это не подавляет предупреждения. - person Vinnie Falco; 03.11.2016
comment
IMO, это должен быть ответ или использование флага компилятора -D для указания этого определения. - person ColinCren; 09.10.2017

Я попробовал BOOST_SYSTEM_NO_DEPRECATED, предложенный @M.Tibbits, и, похоже, он удалил некоторые экземпляры предупреждений (в большой системе, построенной под Linux), но не все.

Однако использование -isystem вместо -I для включения заголовков boost (и игнорирования их проблем) сработало для меня.

Предложено 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

person Tom Brennan    schedule 09.05.2018