测试printf实现

时间:2009-09-04 09:46:51

标签: c portability portable-applications

我希望能够轻松实现我的应用程序。然而, 我听说某些机器上的stdlib有一些printf问题  它不按预期行事的地方。例如,使用转换说明符时 %f然后在某些体系结构上可能发生printf实现 在输出中包含一个小数点!

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

非常感谢, 亨氏

4 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

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

答案 2 :(得分:1)

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

答案 3 :(得分:0)

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

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

我认为printf和sprintf的结果没有区别:格式化算法是相同的。