Puis-je inclure la suppression de cppcheck dans un en-tête de fonction?

J’ai ajouté un commentaire en ligne pour supprimer un avertissement cppcheck, pour une fonction, mais je souhaiterais l’inclure dans l’en-tête de la fonction afin que Doxygen puisse documenter toutes les fonctions inutilisées (je suis en train d’implémenter une API. ne sera pas utilisé dans ma source). Je préférerais ne pas supprimer toutes les erreurs inutilisées, mais plutôt par fonction.

J’aimerais faire quelque chose comme ça:

/** * API function description * * @param p1 function pointer to the ... * @return 0 if successful, -1 otherwise. * // cppcheck-suppress unusedFunction */ int CreateTask(Task_FuncPtr p1) { return doSomething(); } 

Mais quand je fais cela, cppcheck ne “voit” pas la suppression en ligne. Si je le déplace en dehors de l’en-tête, mais juste avant la déclaration de fonction, la suppression fonctionne. La documentation de cppcheck semble impliquer que la suppression doit se faire directement avant la ligne générant alors l’erreur.

Est-ce que quelqu’un a eu du succès avec ça?

En cppcheck sources de cppcheck (fonction de fichier RemoveComments() preprocessor.cpp ), il semble que vous ne puissiez pas le faire.

Le code pour identifier les commentaires est:

 if (str.compare(i, 2, "//") == 0) { /* ... */ } 

et

 else if (str.compare(i, 2, "/*") == 0) { /* ... */ } 

Lorsqu’un commentaire est trouvé, le code qui gère la suppression des avertissements est le suivant:

 if (_settings && _settings->_inlineSuppressions) { std::issortingngstream iss(comment); std::ssortingng word; iss >> word; if (word == "cppcheck-suppress") { iss >> word; if (iss) suppressionIDs.push_back(word); } } 

Donc, cppcheck ignorera les espaces et vérifiera le premier jeton immédiatement après // ou /* .

Malheureusement, les blocs de commentaires spéciaux de Doxygen commencent par /** , /// , /*! ou //! et le troisième caractère empêche la “correspondance correcte”.

En changeant:

 if (word == "cppcheck-suppress") { /* ... */ } 

dans:

 if (contains(word, "cppcheck-suppress")) { /* ... */ } // or if (ends_with(word, "cppcheck-suppress")) 

devrait permettre ce que vous voulez:

 /** * API function description * * @param p1 function pointer to the ... * @return 0 if successful, -1 otherwise. */ /** cppcheck-suppress unusedFunction */ 

ou

 /// API function description /// /// @param p1 function pointer to the ... /// @return 0 if successful, -1 otherwise. /// /// cppcheck-suppress unusedFunction 

Vous pouvez probablement ouvrir un ticket sur http://trac.cppcheck.net/