8
votes

Comment «cacher» des avertissements «déclarés» parasites »déclaré jamais utilisés»?

J'utilise le compilateur Borland (aka "EmbarcodeGearland") C ++ Builder 2007 compilateur qui a un bogue mineur que certains statique const code> articles de fichiers d'en-tête système peuvent causer de faux xzzy est déclaré mais jamais utilisé " Code> Avertissements.

J'essaie d'obtenir mon code à 100% d'avertissement gratuitement, veulent donc un moyen de masquer ces avertissements particuliers (note - mais pas en éteignant simplement l'avertissement!) P>

En outre, je ne peux pas modifier les fichiers d'en-tête. J'ai besoin d'une façon de "simuler" l'utilisation des articles, de préférence sans connaître leur type. P>

comme exemple, ajout de cette fonction à mes modules .CPP fixe des avertissements pour ces quatre éléments, mais il semble que cela semble un peu 'ad-hoc'. Existe-t-il une manière meilleure et de préférence auto-documentante de faire cela? P>

#ifndef DATEUTILS_FIXH
#define DATEUTILS_FIXH

#include <dateutils.hpp>

static void FIX_DATEUTIL_WARNINGS()
{
    UNREFERENCED(OneHour);
    UNREFERENCED(OneMinute);
    UNREFERENCED(OneSecond);
    UNREFERENCED(OneMillisecond);
}

#endif


4 commentaires

Si vous avez écrit une fonction statique qui n'a jamais été appelée, n'auriez-vous pas un avertissement à ce sujet aussi?


@ptomato. Cela ne semble pas :-) - Je débattre mentalement si c'est un bogue ou une fonctionnalité.


Toute chance de passer à VC ++ ou de demander aux personnes de Borland de résoudre ce problème? Comme il vient de leurs en-têtes / compilateur, pas votre code IIUC.


@ALEX - Je pense que c'est probablement corrigé dans les dernières versions. Et non, VC ++ n'est pas une option.


3 Réponses :


6
votes

Le C ++ Builder prend-il en charge un avertissement #pragma ? Si tel est le cas, vous pouvez désactiver cet avertissement autour des lignes #include .

en pseudo-code xxx

quelque chose comme ça ... < / p>

Cela pourrait aider pour C ++ Builder. < / p>


1 commentaires

+1 Pour un bel essai :-) Malheureusement, l'avertissement désactive n'a d'effet que sur le point où les messages sont émis (c.-à-d. Fin de compilation) - donc si vous "pop ', les messages montrent toujours. Si vous ne popez pas, tous les avertissements pour les variables «non utilisées» sont cachées.



9
votes

Un moyen courant de références variables est quelque chose comme ceci:

#define UNREFERENCED(x)  ((void)x)

// ...

void MyFunc()
{
    const int x = 5; // never used for whatever reason
    UNREFERENCED(x); // stops compiler warning
}


2 commentaires

Mais ce n'est pas le problème que cela provient des en-têtes du système, pas son code?


@Alex, vrai, mais je peux toujours le réparer de cette façon. Le compilateur ne peut que déduire que le statique n'est pas utilisé après la compilation du code.



2
votes

Une autre option consiste à utiliser quelque chose comme: xxx

boost et qt ont ceux comme ignore_unused_variable_warning et q_unué respectivement.

Et voici un petit article à ce sujet @ Sutter's Moulin: Arrêtons de compilation


1 commentaires

Beau lien, merci. J'ai le sentiment que cette approche de modèle peut être «Bélier» si des optimisations sont désactivées, sinon cela fonctionne bien.