是否有可能检查您是否正在使用Microsoft C编译器构build64位?

是否有一个简单的预处理器macros为64位版本定义? 我以为_WIN64可能是它,但即使当我build立一个32位的目标,封装在#ifdef _WIN64 ... #endif部分编译,这是造成问题。 现在是星期五,我不能一直思考,但我确信我在这里忽略了一些非常简单的事情。 甚至可能涉及sizeof

Solutions Collecting From Web of "是否有可能检查您是否正在使用Microsoft C编译器构build64位?"

我一直使用_WIN64来检查它是否是64位版本。

NB _WIN32也总是(自动)由MSVC在64位版本中定义,所以在检查_WIN32之前检查_WIN64:

 #if defined( _WIN64 ) // Windows 64 bit code here #elif defined( _WIN32 ) // Windows 32 bit code here #else // Non-Windows code here #endif 

这听起来像你的问题可能涉及到一个头文件或项目设置不正确定义_WIN64 – 这应该留给编译器。

WIN64_WIN64之间有一个微妙的区别(至少对于微软编译器来说 – 其他编译器应该效仿,但不是全部):

  • _WIN64编译器在为Windows 64位平台构建程序时定义的。 请注意,该名称位于编译器实现者的名称空间(前导下划线后跟大写字母)
  • 当定位到64位平台时, WIN64Windows平台SDK (或者今年他们称之为的任何东西)定义。

所以如果你只包括标准头文件而不采取其他措施来定义它, WIN64不会被定义。

对于_WIN32WIN32有一个类似的故事 – 但是检查其他编译器:即使只使用标准头文件,GCC 3.4.5也会定义WIN32 。 数字火星也是如此。

微软的编译器和Comeau没有。

另一个(希望)众所周知的琐事是,当定位64位Windows平台时, _WIN32WIN32被设置。 太多的东西,否则会打破。

Visual C ++编译器定义了以下宏:

  • _M_IX86 – x86平台
  • _M_IA64 – ia64平台
  • _M_X64 – x64平台

检查你的项目的构建属性,特别是预处理器部分。 您是在WIN32版本的某个地方定义_WIN64吗? sizeof东西可能不会工作,因为你不能在#if测试中使用。