J'utilise le compilateur Borland (aka "EmbarcodeGearland") C ++ Builder 2007 compilateur qui a un bogue mineur que certains 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> 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.
#ifndef DATEUTILS_FIXH
#define DATEUTILS_FIXH
#include <dateutils.hpp>
static void FIX_DATEUTIL_WARNINGS()
{
UNREFERENCED(OneHour);
UNREFERENCED(OneMinute);
UNREFERENCED(OneSecond);
UNREFERENCED(OneMillisecond);
}
#endif
3 Réponses :
Le C ++ Builder prend-il en charge un avertissement en pseudo-code p> quelque chose comme ça ... < / p> Cela pourrait aider pour C ++ Builder. P> < / p> #pragma code>? Si tel est le cas, vous pouvez désactiver cet avertissement autour des lignes code> #include code>.
+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.
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 }
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.
Une autre option consiste à utiliser quelque chose comme: boost et qt ont ceux comme Et voici un petit article à ce sujet @ Sutter's Moulin: Arrêtons de compilation p> p> ignore_unused_variable_warning code> et
q_unué code> respectivement. P >
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.
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.