C++ 判断标准版本和编译器
C++ 判断标准版本和编译器
注意: 本人是原创, 如若发现雷同,后果自负
CSDN: https://blog.csdn.net/m0_47534090/article/details/108591764
开发环境
大部分编译器都支持
原理
C++ 20 不确定
clang 和 gcc 判断__cplusplus
__cplusplus的值 |
|
|---|---|
| C++ 17 | 201703L |
| C++ 14 | 201402L |
| C++ 11 | 201103L |
| C++ 03 以下 | 199711L |
msvc 判断_MSVC_LANG |
|
_MSVC_LANG的值 |
|
| -- | -- |
| C++ 17 | 201703L |
| C++ 14 | 201402L |
| C++ 11 | 201103L |
| C++ 03 以下 | 199711L |
判断使用的编译器
| 宏 | |
|---|---|
| msvc | _MSC_VER |
| clang | __clang__ |
| gcc | __GNUC__ |
实现
// cpp.hpp
#ifndef CPP_HPP
#define CPP_HPP
#if defined(__clang__) || defined(__GNUC__)
#define CPP_STANDARD __cplusplus
#elif defined(_MSC_VER)
#define CPP_STANDARD _MSVC_LANG
#endif
#if CPP_STANDARD >= 199711L
#define HAS_CPP_03 true
#elif CPP_STANDARD >= 201103L
#define HAS_CPP_11 true
#elif CPP_STANDARD >= 201402L
#define HAS_CPP_14 true
#elif CPP_STANDARD >= 201703L
#defined HAS_CPP_17 true
#endif
#endif
结论
为了优化代码和兼容性, 可以判断使用的C++版本
浙公网安备 33010602011771号