编译时如何检测GCC等编译器是否至少支持C++17标准
编译期检测C++17标准的实现方案
实现原理
C标准强制要求所有合规编译器定义__cplusplus宏,宏的值对应当前启用的C标准版本:
- C++17对应值为
201703L - 更高版本标准(如C20、C23)的宏值均大于
201703L
你推测的基于__cplusplus宏+#error指令的方案完全可行,且是跨编译器的标准实现方式。
极简预处理器代码片段
直接把以下代码放到你项目的公共头文件顶部即可:
#if __cplusplus < 201703L #error 编译失败:当前编译器使用的C++标准版本低于C++17,请调整编译参数启用C++17或更高标准 #endif
编译器适配注意事项
- GCC/Clang:编译时需显式指定标准参数,例如
-std=c++17、-std=gnu++17、-std=c++20等,否则默认启用的旧标准会触发报错 - MSVC:需要同时做两处设置,一是指定C标准为C17或更高(对应编译参数
/std:c++17或更高),二是开启/Zc:__cplusplus编译选项,否则__cplusplus宏不会返回正确的标准版本值
内容的提问来源于stack exchange,提问作者shuhalo
相关产品推荐
相关产品推荐

