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:
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 winnt.h
tête winnt.h
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.