C++如何根据宏定义判断当前系统当前的编译器完整版本对照表汇总汇总 _ 汇总【干货】

秋枫同学_6851

秋枫同学_6851

2026-05-18

746人浏览

原创

必须依赖各编译器专属宏手动拼接版本号:MSVC用_MSC_VER/_MSC_FULL_VER查表映射;GCC用__GNUC__/__GNUC_MINOR__/__GNUC_PATCHLEVEL__直接组合;Clang需优先检测__apple_build_version__区分Apple版,并用__clang_*宏拼接;ICC、PGI、armclang、XL等均需各自宏组合,无统一标准宏。

c++如何根据宏定义判断当前系统当前的编译器完整版本对照表汇总汇总 _ 汇总【干货】

如果您需要在C++代码中根据宏定义识别当前编译器及其完整版本号,必须依赖各编译器预定义的宏进行判断。不同编译器(如MSVC、GCC、Clang、ICC、PGI等)提供各自专属的宏,且版本编码方式差异显著。以下是覆盖主流编译器的完整宏定义对照表及判别方法:

一、Microsoft Visual C++(MSVC)

MSVC使用_MSC_VER宏表示主版本号,其值为整数,需查表映射到实际版本;_MSC_FULL_VER提供更精确的完整版本(含补丁号),但格式为整型,需按千位/百位/个位拆解。

1、检查_MSC_VER是否已定义,若未定义则非MSVC环境。

2、若_MSC_VER == 1930,对应Visual Studio 2022 17.0。

3、若_MSC_VER == 1929,对应Visual Studio 2019 16.11。

4、提取_MSC_FULL_VER:例如值为193030706,表示主版本19.30、次版本30706,即VS2022 17.0.6。

5、注意:_MSC_VER不随Update版本递增,必须结合_MSVC_LANG和编译器实际行为验证C++标准支持度。

二、GNU Compiler Collection(GCC)

GCC通过__GNUC__、__GNUC_MINOR__、__GNUC_PATCHLEVEL__三个宏分别表示主、次、补丁版本号,可直接拼接为完整语义化版本。

1、确认__GNUC__宏存在,排除非GCC环境。

2、读取__GNUC__值(如12),代表GCC主版本。

3、读取__GNUC_MINOR__值(如2),代表次版本。

4、读取__GNUC_PATCHLEVEL__值(如1),代表补丁号。

5、组合为字符串"12.2.1",即完整GCC版本。

6、注意:__VERSION__宏返回编译器版本字符串(如"12.2.1 20220924 (Red Hat 12.2.1-4)"),但含构建信息,不可用于数值比较。

三、Clang(含Apple Clang)

Clang使用__clang_major__、__clang_minor__、__clang_patchlevel__三宏表示版本,与GCC结构一致;但Apple Clang额外定义__apple_build_version__,需优先检测以区分。

1、先检测__apple_build_version__是否存在,若存在则为Apple Clang。

2、若__apple_build_version__ == 14030022,对应Xcode 14.3.1(Clang 14.0.3)。

3、若未定义Apple宏,则检测__clang__,确认为标准Clang。

4、读取__clang_major__(如15)、__clang_minor__(如0)、__clang_patchlevel__(如7)。

5、组合为"15.0.7"作为Clang完整版本。

6、注意:Apple Clang的__clang_*宏反映底层LLVM版本,而非Xcode显示版本,必须交叉核对__apple_build_version__。

四、Intel C++ Compiler(ICC/ICPC)

ICC使用__INTEL_COMPILER表示主版本(如20210),__INTEL_COMPILER_UPDATE表示Update号(如1),二者组合构成完整版本。

1、检测__INTEL_COMPILER是否定义,若未定义则非ICC环境。

2、提取__INTEL_COMPILER前四位:2021 → 对应2021版。

C++14
C++14

C++14 对 C++11 的修正与增强版本,适合旧系统维护和较老工具链兼容。

下载

3、提取后一位或两位:若值为20211,则Update为1;若为202110,则Update为10。

4、读取__INTEL_COMPILER_UPDATE宏值,与主版本拼接,如"2021.1"。

5、注意:ICC 2021.2起已停止独立发布,后续由Intel oneAPI DPC++/C++ Compiler继承,需检测__INTEL_LLVM_COMPILER宏。

五、NVIDIA HPC SDK(PGI)

PGI编译器(现属NVIDIA HPC SDK)使用__PGI宏标识,版本通过__PGIC__(主)、__PGIC_MINOR__(次)、__PGIC_PATCHLEVEL__(补丁)获取。

1、检测__PGI是否定义,若未定义则非PGI环境。

2、读取__PGIC__(如22),代表HPC SDK主版本22。

3、读取__PGIC_MINOR__(如7),代表次版本。

4、读取__PGIC_PATCHLEVEL__(如0),代表补丁号。

5、组合为"22.7.0"作为完整HPC SDK版本。

6、注意:自HPC SDK 21.7起,PGI宏仍保留兼容性,但推荐优先使用__NVCOMPILER宏识别NVIDIA编译器。

六、ARM Compiler(armclang)

armclang是基于LLVM的ARM定制编译器,同时定义Clang宏和ARM专属宏__ARMCOMPILER_VERSION,后者为整型编码,需查表解析。

1、检测__ARMCOMPILER_VERSION,若存在则为armclang。

2、该宏值为六位整数:前两位为主版本(如23),中间两位为次版本(如05),末两位为补丁(如12)→ "23.05.12"。

3、若__ARMCOMPILER_VERSION == 230512,对应ARM Compiler 6.18(armclang 6.18 = 23.05.12)。

4、同时检查__clang__确保底层为Clang架构。

5、注意:armclang 6.x系列对应ARM Compiler 6,而armclang 7.x起归属ARM Compiler 7,版本映射关系不可跨代套用。

七、IBM XL C/C++

XL编译器使用__xlC__宏标识,版本通过__xlC_ver(主)、__xlC_rel(次)、__xlC_mod(修订)三级宏表示,均为整型。

1、检测__xlC__宏是否存在,确认XL环境。

2、读取__xlC_ver(如16),代表XL主版本16。

3、读取__xlC_rel(如1),代表发布号。

4、读取__xlC_mod(如0),代表修订号。

5、组合为"16.1.0"作为完整XL版本。

6、注意:XL for AIX与XL for Linux宏定义完全相同,需结合__AIX或__linux__宏进一步区分目标平台。

C++免费学习笔记(深入):立即使用
在学习笔记中,你将探索 C++ 的入门与实战技巧!

相关文章

PHP速学视频免费教程(入门到精通)
PHP速学视频免费教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载

相关标签:

c++

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
c++和c语言的区别有哪些
c++和c语言的区别有哪些

c++和c语言的区别:1、面向对象编程(OOP)支持不同;2、新增特性不同;3、标准库不同;4、编译方式不同;5、命名空间不同等等。想了解更多c++的相关内容,可以阅读本专题下面的文章。

2024.03.14

2268

9

c++和python学习顺序推荐
c++和python学习顺序推荐

一般建议先学习C++,再学习Python,因为这样可以逐步从较为底层的编程语言向更高级的语言过渡。想了解更多python的相关内容,可以阅读本专题下面的文章。

2024.03.14

1039

6

python和c++学习性价比分析
python和c++学习性价比分析

Python易于学习,广泛应用于Web开发、数据科学和人工智能等领域,但性能较低。C语言性能高,适用于对性能要求较高的场景,如游戏开发和系统编程,但学习曲线陡峭,错误处理复杂。想了解更多python的相关内容,可以阅读本专题下面的文章。

2024.03.14

447

5

c语言和c++一样吗
c语言和c++一样吗

c语言和c++是两种不同的编程语言,虽然有相似之处,但存在显著差异。c语言专注于过程式编程和系统级开发,以简洁、高效著称。c++作为c语言的超集,引入了面向对象编程,增强了代码组织和管理能力,但学习曲线也更陡峭。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.14

327

5

c语言和c++先学哪个好
c语言和c++先学哪个好

初学者选择学习c语言还是c++语言,需要根据个人学习目标、背景以及编程兴趣和预期应用方向来决定。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.14

426

5

c语言和c++的区别和联系
c语言和c++的区别和联系

c语言和c++是计算机科学领域应用广泛的编程语言。虽然它们有着相似的基础,但它们在语言类型、语法功能和内存管理方面存在着显著差异。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

2024.03.14

600

5

c++软件中文更改教程
c++软件中文更改教程

对于 ide,可通过打开设置,找到语言设置,选择中文,并保存更改。对于非 ide 应用程序,可查找设置或选项,选择语言设置,更改为中文,并保存更改。想了解更多c++的相关内容,可以阅读本专题下面的文章。

2024.03.21

1429

9

python和java和c++学习性价比分析
python和java和c++学习性价比分析

Python以其易学性、丰富的库和活跃的社区而著称,适合数据科学、人工智能和Web开发。Java以其跨平台性、企业级应用开发和Android应用开发而闻名。C++以其底层控制能力、高效性能和游戏开发而著称。选择哪种语言取决于个人兴趣、职业方向和特定需求。想了解更多python和java和c++的相关内容,可以阅读本专题下面的文章。

2024.03.22

1237

7

c++和c语言学习顺序推荐
c++和c语言学习顺序推荐

对于初学者,建议先学习C语言,掌握编程基础后再转入C++,便于理解面向对象编程概念。有编程经验者可直接学习C++,快速接触高级编程技术。想了解更多c++和c语言的相关内容,可以阅读本专题下面的文章。

2024.03.25

1325

9

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
C++ Core Guidelines
C++ Core Guidelines

共0课时 | 0人学习

C++ Reference
C++ Reference

共0课时 | 0人学习

C++ 官方标准说明
C++ 官方标准说明

共0课时 | 0人学习