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");
答案 0 :(得分:2)
看起来不受支持 已经在boost上创建了一张票,以便跟踪它。 如果你真的需要它,你可能想要获取主干版本。
答案 1 :(得分:0)
Boost格式无法实现,但是{fmt} formatting library的实质相似,但使用类似Python的格式字符串语法,可以进行编译时检查。
例如:
#include <fmt/format.h> std::string s = format(FMT_STRING("{2}"), 42);
出现编译时错误,因为格式字符串引用了未提供的参数2。
免责声明:我是{fmt}
的作者