3

以下をコンパイルします。

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

なんで?この警告を回避するにはどうすればよいですか?

4

1 に答える 1

4

I GCC には、特定のライブラリのヘッダーからのすべての警告を黙らせる簡単なトリックがあります。それらを単にシステムヘッダーとして扱います。私の知る限り、これは安全であり、標準的な練習のコースとして使用しています。

つまり、Boost ヘッダーの場所を指定する-isystem代わりに使用するようにコマンド ラインを微調整します。-I他のすべては同じままです。

たとえば、これはMakefile私のプロジェクトの 1 つから取得されます。

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

注:プロジェクトでは、一般的に警告を黙らせないことが重要です。逆に、すべての警告をエラー ( -Werror) として扱い、可能な限り警告する (.eg -Wall -Wextra) 必要があります。上記は、独自のコードからではなく、Boost によって引き起こされた警告のみを無効にします。これはあるべき姿です。

于 2012-03-01T11:23:46.943 に答える