2012-06-08 1 views
4

Je sais que je peux transformer les avertissements en erreurs à l'aide -Werror = ... mais je veux faire l'avertissement suivant dans une erreur:Faire un avertissement de gcc spécifique en une erreur

« classe xxx a des fonctions virtuelles mais destructeur non-virtuel "

La seule façon que je sais que vous pouvez obtenir cette erreur est en allumant le drapeau -WeffC++ trop odieux. Y a-t-il un moyen (ou quel est le sous-drapeau dans -WeffC++ pour cet avertissement) d'imprimer cet avertissement et de le transformer en erreur?

Merci!

+0

Cela pourrait vous aider: http://stackoverflow.com/questions/475407/make-one-gcc-warning-an-error – swalog

+0

J'ai vu ce poste, mais cela ne veut-il pas dire que je devrais encore avoir le drapeau -WeffC++ sur et ensuite dans Werror = ... j'attrape l'avertissement spécifique? Je veux juste imprimer l'avertissement spécifique aussi. – user869525

+0

Quelle est la question exacte, comment activer cet avertissement? comment faire de cet avertissement (et cela seul) une erreur (tout en permettant d'autres avertissements)? –

Répondre

6

-Wnon-virtual-dtor est le nom de l'avertissement spécifique qui est activé par -Weffc++. Pour transformer un avertissement en erreur, vous utilisez -Werror=.... Donc, si l'avertissement était -Wspam, le transformer en une erreur serait -Werror=spam. Donc, dans ce cas, vous utiliseriez -Werror=non-virtual-dtor.

Cependant, je ne pense pas que cet avertissement soit particulièrement utile si vous utilisez GCC version 4.8 ou ultérieure. Ensuite, vous avez accès à la -Wdelete-non-virtual-dtor supérieure:

Warn when delete is used to destroy an instance of a class that has virtual functions and non-virtual destructor. It is unsafe to delete an instance of a derived class through a pointer to a base class if the base class does not have a virtual destructor. This warning is enabled by -Wall .

Notez que g++ -Wspam -Werror=spam est la même chose que g++ -Werror=spam. Le fait de transformer un avertissement en erreur active automatiquement cet avertissement.

Sur une note connexe, vous n'êtes pas le seul à penser que -Weffc++ is a little overzealous.

+0

Bonne réponse, merci! Je connaissais le -Wdelete-non-virtual-dtor; Cependant, nous sommes limités à l'utilisation d'une ancienne version de GCC. – user869525

Questions connexes