在项目的核心算法模块中, 需要输出一些信息, 难免需要拼接字符串。 为了性能考虑, 我没有使用std::string
或者QString
, 以避免字符串拼接运算所带来的额外开销, 而是使用sprintf()
把输出内容 Format 到 Buf 中, 再使用日志API输出。伪码如下:
void calculate()
{
wchar_t logMessageBuf[128] = {0};
int value = 1 + 1;
::swprintf(logMessageBuf, L"This is a log string. Value is %d", value);
g_logger->log(logMessageBuf);
}
::wsprintf()
无法输出浮点数, 也就是说下面的代码有问题:
void calculate()
{
wchar_t logMessageBuf[128] = {0};
double value = 1.0 + 1.0;
::wsprintf(logMessageBuf, L"This is a log string. Value is %lf", value);
// Output: This is a log string. Value is f
g_logger->log(logMessageBuf);
}
这是因为wsprintf()
不支持浮点数的输出, 应该使用::swprintf()
代替它。
::wsprintf
是指 Windows String Print Formatted, 而::swprintf
指的是 String Wide Char Print Formatted。这两者相差巨大。
注意, printf()
系列函数没有对应于 float
型变量的格式控制符。 也就是说当你想使用printf()
系列函数输出float
时, 应使用double
型的格式控制符, 也就是%lf
。