категория boost :: system :: (...) _ определена, но не используется - PullRequest
11 голосов
/ 29 ноября 2009

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

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's error_category.hpp и выделяет некоторые static const, которые комментируются как «предопределенные категории ошибок» или «устаревшие синонимы». Может быть, проблема связана с моей обработкой ошибок (или ее отсутствием) при использовании библиотеки?

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

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

Ответы [ 3 ]

21 голосов
/ 17 сентября 2010

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

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif
7 голосов
/ 29 ноября 2009

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

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

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

1 голос
/ 09 мая 2018

Я попробовал BOOST_SYSTEM_NO_DEPRECATED, предложенный @ M.Tibbits, и, похоже, он удалил некоторые экземпляры предупреждений (в большой системе, построенной под 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

...