You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

编译时如何检测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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.19 00:36:03