代码之家  ›  专栏  ›  技术社区  ›  Mordachai

Win32:Bitest,BitStandComplete,…<-如何禁用此垃圾?

  •  2
  • Mordachai  · 技术社区  · 14 年前

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

    我有许多基于Bitest的模板<>()

    通常MS会提供一个#define XXX符号,如果定义了该符号,将禁用其标题中的某些违规部分,例如NOMINMAX。

    如果你对微软的许多可疑选择感到沮丧,请继续阅读。如果没有,就停在这里

    编辑:

    • 为什么微软不能直接使用 _自作自受???
    • 或者他们为什么不能像每个认识你的人一样使用Bitest 应-始终使用所有的盖子 宏!
    • 微软仍在定义
    1 回复  |  直到 14 年前
        1
  •  1
  •   Michael Burr    14 年前

    不幸的是,微软认为让他们的API使用宏来命名是可以的,因为他们95%或更多的API都使用宏来命名,以使它们在ANSI和Unicode API中“透明”地工作。

    看起来他们没有提供一种干净的方法来阻止宏被定义。我认为您必须从几个糟糕的选项中进行选择,包括:

    • #undef BitTest 你自己
    • 修改 winnt.h 标题
    • 将直接使用Windows API的代码隔离到不依赖于您的应用程序的模块中 BitTest<>

    我肯定还有其他选择——我只是不确定哪一个最不令人讨厌。