当前位置:  开发笔记 > 编程语言 > 正文

如何检测我是否正在使用C++编译64位架构

如何解决《如何检测我是否正在使用C++编译64位架构》经验,为你挑选了4个好方法。

在C++函数中,如果编译64位架构,我需要编译器选择不同的块.

我知道为MSVC++和g ++做一个方法,所以我会把它作为答案发布.但是我想知道是否有更好的方法(更优雅,适用于所有编译器/所有64位架构).如果没有更好的方法,我应该寻找其他预定义的宏,以便与其他编译器/架构兼容?



1> DarkDust..:

在C和C++中检测32位和64位构建的独立于体系结构的方法如下所示:

// C
#include 

// C++
#include 

#if INTPTR_MAX == INT64_MAX
// 64-bit
#elif INTPTR_MAX == INT32_MAX
// 32-bit
#else
#error Unknown pointer size or missing size macros!
#endif



2> Mathieu Pagé..:

这适用于MSVC++和g ++:

#if defined(_M_X64) || defined(__amd64__)
  // code...
#endif


…但是如果您以ARM64或任何其他体系结构为目标,则无法使用。

3> flodin..:

你为什么选择一个区块而不是另一个区块?如果您的决定基于指针的大小,请使用sizeof(void*) == 8.如果您的决定基于整数的大小,请使用sizeof(int) == 8.

我的观点是,架构本身的名称应该很少有任何区别.出于您的目的,您只需检查您需要检查的内容.您的问题并没有清楚地说明您的检查目的是什么.您要问的是类似于通过查询Windows版本来确定是否安装了DirectX.您可以使用更多便携式和通用工具.


@greggo您可以使用例如INT_MAX.例如,参见[](http://en.cppreference.com/w/cpp/types/climits).
sizeof(int)不是很好的例子.这取决于编译器.我尝试使用g ++的64位Linux,它长4个字节.最好使用sizeof(void*)来确定architecutre.但我不确定它是否在所有机器上都是一样的.

4> GSerg..:

雷蒙德报道了这个.

推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有