在VS2008 SP1安装中,WinNT.h中有以下几行:
#define BitTest _bittest #define BitTestAndComplement _bittestandcomplement #define BitTestAndSet _bittestandset #define BitTestAndReset _bittestandreset #define InterlockedBitTestAndSet _interlockedbittestandset #define InterlockedBitTestAndReset _interlockedbittestandreset
我有一些基于BitTest <>()的模板,
有谁知道一个简单的方法来禁用这些#定义?
MS通常会提供一个#define XXX符号,如果定义了这个符号,将禁用它们头部的一些违规部分 – 例如NOMINMAX。
我一直无法find解决上述问题的办法。
如果你与微软的许多可疑的select分享挫折,阅读。 如果没有,请到这里。 ;)
编者按:
不幸的是,微软认为可以让他们的API使用宏的名称,因为他们做了95%或更多的API,使他们对ANSI和Unicode API“透明”工作。
看起来他们似乎没有提供一个干净的方法来防止宏被定义。 我认为你从几个不好的选择选择,包括:
#undef BitTest
你自己 winnt.h
头文件 BitTest<>
模板的模块中 我相信还有其他的选择 – 我只是不确定哪一个是最不合适的。