5

アプリケーションの移植可能な実装が必要です。ただし、特定のマシンで stdlib の printf が意図したとおりに動作しないという問題があると聞いています。たとえば、変換指定子 %f を使用すると、特定のアーキテクチャで printf 実装の出力に小数点が含まれる場合があります。

stdlib c 実装、特に printf ルーチンのセマンティックの正確性をテストするために使用できるテスト ルーチンがいくつかあるのではないかと考えています。プログラムを移植する際の問題点を指摘する優れたリソースがいくつかあるのではないでしょうか?

どうもありがとう、ハインツ

4

4 に答える 4

4

ポステルの法則(「行うことは保守的であり、他者から受け入れることは寛容である」) もここに当てはまると思います。実装が機能していると見なすために、文字ごとの一致を要求するテストを作成しないでくださいprintf()

代わりに、より高いレベルで実行してください。printf()によって出力されたテキストを期待されるデータ型に解析し、その型の値と比較します。

つまり、「2.25」と出力する場合は、テキストを (strtod()または同等のものを使用して) 解析し、リテラルのテキスト文字列「2.25」ではなく、実際の数値 2.25 と比較します。

于 2009-09-04T12:50:54.340 に答える
3

msvcrt dll のワイン テスト スイートは興味深いようです: 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 に答える