2

これが私が意味する頭痛の1つの例です:

テキストを画面にレンダリングするために主に Unicode 文字列を使用するマルチプラットフォーム プロジェクトがあります。VC ++のウィンドウでは、次の行:

swprintf(swWideDest, LEN, L"%s is a wide string", swSomeWideString);

正常にコンパイルされ、ワイド文字列が別のワイド文字列に出力されます。ただし、これは実際には次のようにする必要があります。

swprintf(swWideDest, LEN, L"%ls is a wide string", swSomeWideString);

'%s' を '%ls' に置き換えないと、他のプラットフォームでは機能しません。Windows の環境でのテストは、デバッグがより簡単で、迅速で、はるかに簡単であるためです。この種のバグは、見過ごされがちです。

最初から正しいコードを書くことが最善の解決策であることはわかっていますが、プレッシャーがかかると単純な間違いが起こり、この特定のケースでは、その間違いは長い間見過ごされがちです。

この種のバグには多くのバリエーションがあり、まだ楽しんでいないと思います。

この種のバグを見つけるためのきちんとした方法を持っている人はいますか?

:D

4

2 に答える 2

4

Boost.Format がニーズに対して遅すぎる場合に備えて、FastFormatを確認することをお勧めします。

stringstreams と Boost.Format との比較:

  • IOStreams: FastFormat.Format は IOStreams よりも高速で、すべての場合で ~100 ~ 900% です。
  • Boost.Format: FastFormat.Format は Boost.Format よりも高速で、すべての場合で ~400 ~ 1650% 高速です。
于 2009-09-24T19:15:33.760 に答える
2

家族の機能はどれも*printfタイプセーフではないので、あなたも

于 2009-09-24T17:58:47.733 に答える