5

我想要一个可移植的应用程序实现。但是,我听说某些机器上的 stdlib 中的 printf 存在一些问题,它的行为与预期不符。例如,当使用转换说明符 %f 时,可能会发生在某些架构上 printf 实现在输出中包含小数点的情况!

现在我想知道,是否有一些测试例程可以用来测试 stdlib c 实现的语义正确性,特别是 printf 例程。也许有一些很好的资源可以在移植程序时指出一些问题?

非常感谢,亨氏

4

4 回答 4

4

我认为Postel 法则(“在你所做的事情上保持保守,在你接受他人的事情上保持自由”)也适用于此。不要编写测试来要求逐个字符匹配以考虑printf()实现工作。

相反,做一个更高的水平;将文本输出解析printf()为预期的数据类型,并与该类型的值进行比较。

即,如果打印“2.25”,则解析文本(使用strtod()或等效)并与实际数字 2.25 进行比较,而不是文本字符串“2.25”。

于 2009-09-04T12:50:54.340 回答
3

msvcrt dll 的 wine 测试套件看起来很有趣:http: //github.com/mirrors/wine/blob/master/dlls/msvcrt/tests/printf.c

于 2010-10-06T15:57:31.257 回答
1

您应该编写自己的测试套件来涵盖您所关心的问题。使用不同的输入调用 printf 100 次非常简单,输出是简单的文本,因此很容易检查您期望的输出。

于 2009-09-04T12:40:31.707 回答
0

我建议通过以下方式对其进行测试:使用 sprintf() 生成一些测试模板并将它们与您的“正确”模板进行比较。

我使用 fprintf 做了类似的事情(只是为了避免我们的嵌入式系统中的缓存)。

我认为 printf 和 sprintf 的结果不会有所不同:格式化算法是相同的。

于 2009-09-04T12:58:47.830 回答