Win32: BitTest, BitTestAndComplement,… <- Comment désactiver cette ordure?

WinNT.h contient les lignes suivantes, dans l’installation de VS2008 SP1:

#define BitTest _bittest #define BitTestAndComplement _bittestandcomplement #define BitTestAndSet _bittestandset #define BitTestAndReset _bittestandreset #define InterlockedBitTestAndSet _interlockedbittestandset #define InterlockedBitTestAndReset _interlockedbittestandreset 

J’ai un certain nombre de modèles basés sur BitTest ()

Est-ce que quelqu’un connaît un moyen simple de désactiver ces #défines?

Souvent, MS fournit un symbole #define XXX qui, s’il est défini, désactivera une partie incriminée de leur en-tête, par exemple NOMINMAX.

J’ai été incapable de trouver une telle solution au problème ci-dessus.

Si vous partagez la frustration liée aux nombreux choix douteux de Microsoft, continuez la lecture. Sinon, arrêtez-vous ici. 😉

Éditorialisation:

  • Pourquoi Microsoft n’a-t-il pas pu utiliser le fichier _bittest lui-même ???
  • Ou pourquoi ne pourraient-ils pas utiliser BITTEST comme chacun sait, vous devriez toujours utiliser des majuscules pour les macros!
  • Microsoft est encore #définir les choses en 2010?! WTF?

Malheureusement, Microsoft pense qu’il est correct de faire en sorte que leurs API utilisent des macros pour les noms puisqu’ils le font pour au moins 95% de leurs API afin de les faire fonctionner de manière “transparente” pour les API ANSI par rapport aux API Unicode.

Il ne semble pas qu’ils aient fourni un moyen propre d’empêcher la définition de la macro. Je pense que vous devez choisir parmi plusieurs mauvaises options, notamment:

  • #undef BitTest vous-même
  • modifier l’en winnt.h tête winnt.h
  • Séparez votre code qui utilise les API Windows directement dans des modules qui ne dépendent pas de votre BitTest<> .

Je suis sûr qu’il y a d’autres options – je ne suis pas sûr de savoir laquelle est la moins répugnante.