2

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

2 回答 2

2

看起来它不受支持 在 boost 上还创建了一个票证来跟踪它。如果您真的需要,您可能需要选择中继版本。

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

于 2013-09-24T06:37:30.907 回答
0

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

例如:

#include <fmt/format.h>

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

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

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

于 2020-06-24T22:56:12.697 回答