这是我所说的令人头疼的问题之一的示例:

我们有一个多平台项目,主​​要使用 Unicode 字符串将文本渲染到屏幕上。在 Windows 上,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

有帮助吗?

解决方案

由于没有任何功能 *printf family 是类型安全的,你也可以

  • 通过正则表达式搜索可能的错误并手动修复它们
  • 使用另一种类型安全的方法,可能基于字符串流或 升压格式

其他提示

您可能想看看 快速格式化 如果 Boost.Format 太慢而无法满足您的需求。

与 stringstreams 和 Boost.Format 相比:

  • IO 流:fastformat.format在所有情况下都比iostreams快于100-900%
  • 升压格式:fastformat.format比boost.format快于400-1650%,在所有情况下
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top