如何使用ifdef检测是否支持Windows DWORD_PTR类型?

use*_*876 3 c c++ windows win64 visual-c++

Windows API中有一些新的整数类型支持Win64.他们并不总是受到支持; 例如,它们不存在于MSVC6中.

如何编写#if条件来检测这些类型是否受支持<windows.h>

(我的代码需要在许多不同版本的Microsoft Visual C++下编译,包括MSVC6.所以我需要提供我自己的这些类型的定义,#if并在新的编译器中禁用它们).

(对于搜索者,完整的类型列表是:DWORD_PTR,INT_PTR,LONG_PTR,UINT_PTR,ULONG_PTR)

MSN*_*MSN 5

MSC_VER是一个在[1200, 1300)MSVC 6 范围内的值.所以你可以使用#if MSC_VER>=1200 && MSC_VER<1300.

编辑:正如安德斯所说,这不是"我的编译器MSVC 6"之外的测试的有效性.但是,您也可以使用:

#if defined(MAXULONG_PTR)
Run Code Online (Sandbox Code Playgroud)

由于DWORD_PTR是值类型,因此它具有为其定义的最大值basetsd.h.

  • 仅仅因为编译器是VC6并不意味着没有定义那些类型,通常你会使用VC6以及一个有点最新的平台sdk (2认同)
  • Blindy:我们将源代码发送给客户.如果我们声称支持VC6,我们的代码需要正常工作.需要更新的平台SDK会导致来自没有它的人的支持电话,或者没有正确配置它.这会使客户烦恼,花费时间(= =因产品推迟而导致的销售损失)和金钱,并且花费我们时间和金钱来回应.我们_could_只是说"需要VC2003",因为这是一个足够简单的信息供人们理解.我们最终会这样做......但还没有. (2认同)