2

这是我的意思的一个令人头疼的例子:

我们有一个多平台项目,主​​要使用 Unicode 字符串将文本呈现到屏幕上。在 VC++ 中的 windows 上,行:

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

你可能想看看FastFormat以防 Boost.Format 太慢而无法满足你的需要。

与 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家庭的任何功能都不是类型安全的,因此您也

  • 通过正则表达式搜索可能的错误并手动修复它们
  • 使用另一种类型安全的方法,可能基于 stringstreams 或boost.format
于 2009-09-24T17:58:47.733 回答