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

编译时如何区分-std=c++17与-std=gnu++17?宏检查方案

判断g++是否原生支持__int128的std::limits适配的条件编译宏
  • 你可以使用__GLIBCXX_TYPE_INT_N_0这个宏作为判断条件。当g++在-std=gnu++17模式下原生支持__int128的std::limits适配时,该宏会被定义;而在-std=c++17模式下,这个宏未定义,此时你的适配头文件可以安全生效。
  • 对应的条件编译代码写法:
#if !defined(__GLIBCXX_TYPE_INT_N_0)
// 此处放置你的__int128的std::limits适配代码
#endif
  • 补充说明:__GLIBCXX_TYPE_INT_N_0是GNU libstdc++的内部宏,它的存在表示编译器已经为__int128提供了标准库的原生特化支持,此时再手动添加适配代码就会触发重复定义报错,用这个宏做判断刚好能规避该问题。

内容的提问来源于stack exchange,提问作者Alexis Wilke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 21:31:17