我希望能够轻松实现我的应用程序。然而, 我听说某些机器上的stdlib有一些printf问题 它不按预期行事的地方。例如,使用转换说明符时 %f然后在某些体系结构上可能发生printf实现 在输出中包含一个小数点!
现在我想知道,如果可能有一些测试程序,我可以 用于测试stdlib c实现的语义正确性,特别是printf 常规。也许在移植程序时有一些好的资源可以指出一些问题?
非常感谢, 亨氏
答案 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的结果没有区别:格式化算法是相同的。