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

使用C++17编译时如何抑制strftime的ISO C++11不支持警告?

问题原因

你使用的%04Y格式中的0前导填充标志是POSIX扩展特性,并不属于ISO C标准(包括C11到C17)规定的strftime格式语法。你的编译命令里添加了-Wpedantic,这个选项会强制检查所有不符合C标准的扩展用法,再配合-Werror就把该合规性警告直接转成了编译错误。g++ 8.5.0在-Wpedantic模式下对标准的严格性检查会触发这个问题。

抑制警告/解决方法

有几种可行的处理方式:

  • 改用标准兼容写法:ISO C++标准中%Y本身就要求输出4位年份,默认用前导零填充。你可以直接把格式字符串改成"%a %d %b %4Y"甚至"%a %d %b %Y",两者效果和%04Y完全一致,且符合标准,不会触发警告。
  • 局部抑制pedantic警告:如果一定要保留%04Y,可以在使用strftime的代码段前后添加GCC特有的编译指令,只抑制这部分的pedantic警告:
    #pragma GCC diagnostic push
    #pragma GCC diagnostic ignored "-Wpedantic"
    strftime(buffer, sizeof(buffer), "%a %d %b %04Y", &timeinfo);
    #pragma GCC diagnostic pop
    
  • 全局关闭特定警告:在编译命令里添加-Wno-pedantic可以关闭所有pedantic相关的警告,但这会同时忽略其他不符合标准的代码问题,不推荐除非你确实不需要严格的标准检查。

内容的提问来源于stack exchange,提问作者Kevin Truong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 19:45:30