-1

オプションで C++ Boost ライブラリを使用しているように見えるコードを読んでいます。それは次のとおりです。

#ifdef _HAVE_BOOST
#include <boost/random.hpp>
#endif

コードの後半には、この「_HAVE_BOOST」に依存するステートメントがいくつかあります。C++ ライブラリが適切にインポートされている場合、_HAVE_BOOST は単に true に設定されているフラグだと思います。

「_HAVE_BOOST」フラグは C++ ifdef 構文の組み込み部分ですか? つまり、このフラグについて Google を試しましたが、ドキュメントが見つかりませんでした。また、ファイルの先頭には no#include<boost>が存在します。#include<boost>このブースト機能はファイル全体で廃止されているようです -- これが追加された場合、_HAVE_BOOST は true に設定されますか?

#ifdef に付随する大文字の種類を説明するためのリストまたはドキュメントはどこかにありますか?

4

3 に答える 3

3

_HAVE_BOOST は単に true に設定されたフラグだと思います...

#ifdef _HAVE_BOOST_HAVE_BOOSTかどうかはテストしませんtrue値に関係なく、そのようなプリプロセッサ マクロが定義されているかどうかをテストします。

...C++ ライブラリが適切にインポートされている場合。

はい、コンテキストを考慮すると、この特定のマクロはおそらく、Boost が利用可能かどうか、つまり、Boost に依存できるかどうかを示すことを意図しています。

#ifdef に付随する大文字の種類を説明するためのリストまたはドキュメントはどこかにありますか?

#defineマクロは、ヘッダー ファイルまたはコンパイル コマンドのいずれかのディレクティブで定義できます(たとえば、 gccの -D オプションを参照してください)。コンパイラは、一部のマクロも事前定義する場合があります。

どのヘッダー ファイルでもマクロを定義できます。通常、どのマクロが定義されているかは、ドキュメントを読むか、ドキュメントがない場合はヘッダー ファイル自体を読むことで見つけることができます。

この #include が追加された場合、_HAVE_BOOST は true に設定されますか?

それ自体が定義される可能性は低いと思います<boost>。結局のところ、Boost を含めようとした後で Boost が利用可能かどうかをテストするのは無意味です。

_HAVE_BOOST はいつ定義されますか?

コードを書いた人に聞いてください。熟考すべきもう 1 つの質問は、それはそもそも定義されているのかということです。そうでない場合、ifdef 間のコードはプリプロセッサによって削除されます。

私の水晶玉は、おそらくビルド プロセス用の何らかの構成スクリプトによって定義されるはずだということを教えてくれます。たとえば、autoconfHAVE_header-fileには、ヘッダーが存在する場合にプリプロセッサ マクロを定義するマクロがあります。先頭にアンダースコアがないことに注意してください。

于 2014-05-19T16:20:06.173 に答える