【问题标题】:boost::lexical_cast compiles with warningsboost::lexical_cast 编译时带有警告
【发布时间】:2012-03-01 10:33:28
【问题描述】:

编译如下:

// file main.cpp

#include <string>
#include <boost/lexical_cast.hpp>

int main()
{
    boost::lexical_cast<std::string>( 656.16 );
    return 0;
}

结果:

/usr/local/include/boost/lexical_cast.hpp:1184: warning: ISO C++ does not support the ‘%lg’ printf format

为什么?如何避免这个警告?

【问题讨论】:

  • 写一个补丁,发送到 boost 邮件列表。他们通常不太关心警告。我为自己写了一个围绕 gcc 的包装脚本,它过滤掉了所有的 boost 警告。

标签: c++ boost warnings iso lexical-cast


【解决方案1】:

我是 GCC,有一个简单的技巧可以使来自特定库标题的所有警告静音。只需将它们视为 system 标头。据我所知,这是安全的,我将其用作标准实践课程。

也就是说,调整您的命令行以使用 -isystem 而不是 -I 来指定 Boost 标头位置。其他一切都保持不变。

例如,这是取自我的一个项目的Makefile

BOOST=/usr/local/Cellar/boost/1.48.0
CXXFLAGS+=-isystem$(BOOST)

注意:在您的项目中,不要忽略警告,这一点很重要。相反,您应该将所有警告视为错误(-Werror)并尽可能发出警告(例如-Wall -Wextra)。以上仅禁用由 Boost 引起的警告,而不是来自您自己的代码。这是应该的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-06-21
    • 2011-03-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-20
    • 2016-01-05
    • 1970-01-01
    相关资源
    最近更新 更多