编译时检查Boost.Format

时间:2013-09-23 22:05:02

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

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");

2 个答案:

答案 0 :(得分:2)

看起来不受支持 已经在boost上创建了一张票,以便跟踪它。 如果你真的需要它,你可能想要获取主干版本。

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

答案 1 :(得分:0)

Boost格式无法实现,但是{fmt} formatting library的实质相似,但使用类似Python的格式字符串语法,可以进行编译时检查。

例如:

#include <fmt/format.h>

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

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

免责声明:我是{fmt}

的作者
相关问题