boost::lexical_cast компилирует с предупреждениями

Составление следующего:

// 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

Зачем? Как избежать этого предупреждения?

1 ответ

Решение

Я GCC, есть простой трюк, чтобы заставить замолчать все предупреждения от заголовков конкретной библиотеки. Просто относитесь к ним как к системным заголовкам. Насколько я знаю, это безопасно, и я использую это как курс стандартной практики.

То есть настройте командную строку для использования -isystem вместо -I указать расположение заголовка Boost. Все остальное остается прежним.

Например, это взято из Makefile одного из моих проектов:

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

Примечание: важно, чтобы вы не отключали предупреждения вообще в своих проектах. Наоборот, вы должны рассматривать все предупреждения как ошибки (-Werror) и предупредить как можно больше (.eg -Wall -Wextra). Вышеприведенное отключает только те предупреждения, вызванные Boost, а не из вашего собственного кода. Это так и должно быть.

Другие вопросы по тегам