Pregunta

Actualmente estoy recibiendo advertencias del compilador que se asemejan a la advertencia que di en el título de la pregunta. Advertencias como ...

advertencia: 'boost :: system :: generic_category' definido pero no utilizado

advertencia: 'boost :: system :: posix_category' definido pero no utilizado

advertencia: 'boost :: system :: errno_ecat' definido pero no utilizado

advertencia: 'boost :: system :: native_ecat' definido pero no utilizado

Hasta donde yo sé, el programa no se ve afectado de ninguna manera. Sin embargo, no me gustan las advertencias, pero no tengo idea de lo que estas advertencias intentan decirme, además de que algo definido y relacionado con el impulso está en algún lugar que no se usa. Sin embargo, todo lo que he definido, lo he usado. Las bibliotecas de impulso que estoy usando son la biblioteca aleatoria y la biblioteca del sistema de archivos.

Cuando verifico el origen de la advertencia, aparece el archivo error_category.hpp de Boost y resalta algunos static const s que se comentan como " categorías de error predefinidas " o "sinónimos obsoletos". ¿Quizás el problema tiene algo que ver con mi manejo de errores (o falta de) cuando uso la biblioteca?

¿Alguien puede dar una idea de por qué están apareciendo estas advertencias? ¿Me estoy perdiendo algo por completo?

P.S. Las advertencias están al máximo nivel.

¿Fue útil?

Solución

Esto se relaciona con la biblioteca error_code en la biblioteca Boost.System. Los códigos de error de impulso contienen dos atributos: valores y categorías. Para que los códigos de error sean extensibles para que los usuarios de la biblioteca puedan diseñar sus propias categorías de error, los diseñadores de impulso necesitaban alguna forma de representar una categoría de código de error única. Un número de identificación simple no sería suficiente, ya que esto podría dar como resultado que dos proyectos utilicen números de identificación en conflicto para categorías de error personalizadas.

Entonces, básicamente, lo que hicieron fue usar direcciones de memoria, en forma de objetos estáticos que heredan de la clase base error_category . Estas variables en realidad no hacen nada excepto servir como identificadores únicos de una determinada categoría de error. Debido a que son esencialmente objetos ficticios estáticos con direcciones únicas en la memoria, puede crear fácilmente sus propias categorías de error personalizadas que no interferirán con otras '' ID '' de categoría de error. Consulte aquí para obtener más información. .

Supongo que lo que estás viendo es un efecto secundario de esta decisión de diseño. Como estas variables nunca se usan realmente en su programa, el compilador está generando advertencias. Baste decir que no creo que estés haciendo nada malo.

Otros consejos

Estoy de acuerdo con @Charles Salvia, pero quería agregar que al menos a partir de Boost 1.44.0, estas definiciones ahora están envueltas, para ser excluidas como obsoletas. Entonces, si no los está utilizando, simplemente incluya las siguientes líneas antes de incluir el archivo de encabezado:

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif

Probé el BOOST_SYSTEM_NO_DEPRECATED sugerido por @ M.Tibbits, y pareció eliminar algunas instancias de las advertencias (en un gran sistema construido bajo Linux), pero no todas.

Sin embargo, usar -isystem en lugar de -I para incluir los encabezados de impulso (e ignorar sus problemas) funcionó para mí.

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

Explicado (oblicuamente) por GNU GCC: http: //gcc.gnu .org / onlinedocs / gcc / Directory-Options.html

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top