Domanda

Attualmente sto ricevendo avvisi del compilatore che assomigliano all'avviso che ho dato nel titolo della domanda. Avvertimenti come ....

avviso: 'boost :: system :: generic_category' definito ma non utilizzato

avviso: 'boost :: system :: posix_category' definito ma non utilizzato

avviso: 'boost :: system :: errno_ecat' definito ma non utilizzato

avviso: 'boost :: system :: native_ecat' definito ma non utilizzato

Per quanto ne so, il programma non viene influenzato in alcun modo. Tuttavia, non mi piacciono gli avvisi in giro, ma non ho idea di cosa stiano cercando di dirmi questi avvisi, oltre al fatto che qualcosa di definito e correlato a boost è in giro da qualche parte non utilizzato. Tuttavia, tutto ciò che ho definito, l'ho usato. Le librerie boost che sto usando sono la libreria casuale e la libreria del filesystem.

Quando controllo l'origine dell'avviso, viene visualizzato il file error_category.hpp di Boost ed evidenzia alcune const statiche che vengono commentate come "categorie di errore predefinite"; o "sinonimi deprecati". Forse il problema ha a che fare con la mia gestione degli errori (o la mancanza di) quando uso la libreria?

Qualcuno può dare qualche spunto sul perché questi avvisi stanno spuntando? Mi manca completamente qualcosa?

P.S. Gli avvisi sono al massimo livello.

È stato utile?

Soluzione

Ciò si riferisce alla libreria error_code nella libreria Boost.System. Boost error_codes contiene due attributi: valori e categorie. Per rendere estendibili i codici errore in modo che gli utenti della biblioteca possano progettare le proprie categorie di errori, i progettisti di boost avevano bisogno di un modo per rappresentare una categoria di codici di errore univoca. Un semplice numero ID non sarebbe sufficiente, perché ciò potrebbe comportare due progetti che utilizzano numeri ID in conflitto per categorie di errori personalizzate.

Quindi, fondamentalmente, quello che hanno fatto è stato usare gli indirizzi di memoria, sotto forma di oggetti statici che ereditano dalla classe base error_category . Queste variabili in realtà non fanno altro che servire da identificatori univoci di una determinata categoria di errori. Poiché si tratta essenzialmente di oggetti fittizi statici con indirizzi univoci in memoria, puoi facilmente creare le tue categorie di errori personalizzate che non interferiranno con altre categorie di errori "ID". Vedi qui per maggiori informazioni .

Suppongo che ciò che stai vedendo sia un effetto collaterale di questa decisione progettuale. Dal momento che queste variabili non vengono mai effettivamente utilizzate nel programma, il compilatore sta generando avvisi. Basti dire che non penso che tu stia facendo qualcosa di sbagliato.

Altri suggerimenti

Sono d'accordo con @Charles Salvia, ma volevo aggiungere che almeno a partire da Boost 1.44.0, queste definizioni sono ora racchiuse - da escludere come deprecate. Quindi, se non li stai usando, includi solo le seguenti righe prima di includere il file header:

#ifndef BOOST_SYSTEM_NO_DEPRECATED
#define BOOST_SYSTEM_NO_DEPRECATED 1
#endif

Ho provato il BOOST_SYSTEM_NO_DEPRECATED suggerito da @ M.Tibbits, e mi è sembrato di rimuovere alcune istanze degli avvertimenti (in un grande sistema costruito sotto Linux), ma non tutti.

Tuttavia, usare -isystem invece di -I per includere le intestazioni boost (e ignorare i loro problemi) ha funzionato per me.

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

Spiegato (obliquamente) da GNU GCC: http: //gcc.gnu .org / onlinedocs / gcc / Directory-Options.html

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top