编译C或C ++代码时找出CPU体系结构的最可靠方法是什么? 据我所知,不同的编译器具有自己的非标准预处理器定义集(MSVS中的_M_X86,GCC中的__i386__,__arm__等)。
有没有检测我要构建的体系结构的标准方法? 如果不是,是否有针对各种编译器的此类定义的完整列表的来源,例如带有所有样板#ifdef的标头?
操作系统检测的基本答案相同:stackoverflow.com/questions/142508/
这是有关预定义体系结构宏和其他类型的预定义宏的一些信息。
这个问题会问它们在GCC源代码中的定义位置。
C或C ++标准是否定义了供不同编译器使用的任何建议性宏。
这似乎是正确的,但是有人可以引用使用它的GCC文档吗?
没有内部编译器标准,但是每个编译器都趋于一致。您可以为自己构建标题,如下所示:
#if MSVC
#ifdef _M_X86
#define ARCH_X86
#endif
#endif
#if GCC
#ifdef __i386__
#define ARCH_X86
#endif
#endif
列出完整的列表没有什么意义,因为有成千上万的编译器,但被广泛使用的只有3-4个(Microsoft C ++,GCC,Intel CC或TenDRA?)。只需确定您的应用程序将支持哪些编译器,列出其#defines并根据需要更新标头即可。
这在Visual Studio 2010上对我不起作用。肯定没有定义_M