【问题标题】:Compile-time checking of Boost.FormatBoost.Format 的编译时检查
【发布时间】:2013-09-23 22:05:01
【问题描述】:

Clang 和 GCC 都可以检查 printf 样式函数的格式字符串和参数之间的不匹配。例如,他们会抱怨这样的陈述:

printf("Hello, %s!\n");

Boost.Format 是否存在类似情况?换句话说,是否有任何编译器开关、静态分析工具等可以警告代码之类的

std::string s1 = str(boost::format("Hello, %s!"));

std::string s2 = str(boost::format("Hello, %s!") % "John" % "Doe");

【问题讨论】:

    标签: c++ boost compiler-warnings static-analysis boost-format


    【解决方案1】:

    好像不支持 在 boost 上还创建了一张票以跟踪它。 如果你真的需要它,你可能想选择主干版本。

    https://svn.boost.org/trac/boost/ticket/6815

    【讨论】:

      【解决方案2】:

      这在 Boost 格式中是不可能的,但 {fmt} formatting library 在本质上相似但使用类似 Python 的格式字符串语法提供编译时检查。

      例如:

      #include 
      
      std::string s = format(FMT_STRING("{2}"), 42);
      

      给出编译时错误,因为格式字符串引用了未提供的参数 2。

      免责声明:我是{fmt}的作者

      【讨论】:

        猜你喜欢
        • 2017-06-26
        • 1970-01-01
        • 2014-09-03
        • 1970-01-01
        • 2013-08-20
        • 2020-01-07
        • 2011-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多