Essayer de se débarrasser d'un avertissement c ++ boost
Question
Chaque fois que j'introduis boost dans mon projet, je reçois un million de ces avertissements. Est-ce que quelqu'un sait comment je peux me débarrasser des avertissements?
../ depend \ boost / config / abi_prefix.hpp (19) : avertissement C4103: 'dépend de \ boost \ config \ abi_prefix.hpp' : alignement modifié après avoir inclus en-tête, peut-être dû à l'absence de #pragma pack (pop)
Je sais que je peux faire un #pragma pour désactiver l'avertissement, mais j'aimerais connaître la raison de ces avertissements.
La solution
La raison en est que boost n’affiche pas ces pragmas dans tous les fichiers nécessitant le compactage des données. Ils incluent un fichier séparé qui effectue le push (abi_prefix.hpp), puis un autre fichier (abo_suffix.hp) qui effectue ensuite le pop.
Cela leur permet de réutiliser le même code #pragma pack partout, ce qui est pratique car il peut varier d’un compilateur à un autre.
Mais c'est parfaitement sûr. Le push #pragma est suivi d'un pop, il est simplement inclus à partir d'un fichier différent. Donc, vous devriez probablement simplement désactiver cette erreur.
Autres conseils
Oui, vous obtiendrez cela de la directive #pragma pack dans config / abi / msvc_prefix.hpp. Cela indique que l'emballage par défaut de votre projet n'est pas 8. C'est assez inhabituel, est-ce intentionnel? Les bugs dus aux différences de conditionnement peuvent être un peu difficiles à diagnostiquer.
J'ai trouvé un moyen de me débarrasser de cet avertissement.
Vous devez éditer le fichier boost_1 _ ** \ boost \ config \ user.hpp et décommenter la ligne avec BOOST_DISABLE_ABI_HEADERS
Vous devriez donc définir dans ce fichier:
#define BOOST_DISABLE_ABI_HEADERS
Une fois cela fait, il vous suffit de construire avec bjam comme vous le feriez normalement .
Consultez les commentaires ci-dessous pour connaître les dangers de cette solution