J’ai un projet qui utilise Crypto ++ pour quelques fonctions de hachage. Récemment, j’ai décidé de nettoyer un peu les choses et d’utiliser le niveau d’avertissement 4 sur MSVC ++.
Voici à quoi ressemble ma source:
#pragma warning(push) #pragma warning(disable: 4100) //Unreferenced formal parameter #pragma warning(disable: 4244) //Conversion, possible loss of data #pragma warning(disable: 4512) //Assignment operator could not be generated #pragma warning(disable: 4127) //Conditional expression is constant #pragma warning(disable: 4505) //Unreferenced local function has been removed #define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1 #include #include #pragma warning(pop)
Malgré disable: 4505
, je reçois toujours cet avertissement:
c:\cppdev\cryptopp561\cryptopp\misc.h(548): warning C4505: 'CryptoPP::SsortingngNarrow' : unreferenced local function has been removed
et mon projet ne construit pas.
Comment puis-je contourner cela? Fondamentalement, je voudrais juste désactiver l’avertissement pour le code tiers; Je ne veux pas éditer cryptopp lui-même pour corriger l’erreur si je peux éviter de le faire.
Le compilateur ne peut déterminer les fonctions non référencées qu’après avoir analysé le fichier source compilé. Déplacez le #pragma disable
correspondant à #pragma disable
hors de la scope push / pop afin qu’il soit toujours actif à la fin du fichier:
#pragma warning(push) #pragma warning(disable: 4100) //Unreferenced formal parameter #pragma warning(disable: 4244) //Conversion, possible loss of data #pragma warning(disable: 4512) //Assignment operator could not be generated #pragma warning(disable: 4127) //Conditional expression is constant #define CRYPTOPP_ENABLE_NAMESPACE_WEAK 1 #include #include #pragma warning(pop) #pragma warning(disable: 4505) //Unreferenced local function has been removed
Si vous avez juste besoin de quelques fonctions de hachage, créez un fichier source séparé avec 4505 désactivé pour inclure les en-têtes crapto et écrivez votre propre fichier d’en-tête pour définir les prototypes de fonctions que vous utilisez.