2014-05-19 19 views
-1

我正在閱讀一段代碼,它似乎可以選擇使用C++ Boost庫。它如下所示:_HAVE_BOOST宏是否內置在C++中?它從何而來?

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

在代碼的後面,有幾條語句依賴於這個「_HAVE_BOOST」。我認爲_HAVE_BOOST只是一個設置爲true的標誌,如果C++庫被正確導入。

「_HAVE_BOOST」標誌是C++ ifdef語法的內置部分嗎?也就是說,我試着用谷歌搜索這個標誌,但沒有找到任何文檔。另外,在文件的頭部,不存在#include<boost>。看起來這個boost功能在整個文件中被棄用 - 如果這個#include<boost>被添加,會將_HAVE_BOOST設置爲true嗎?

是否有列表或文檔描述與#ifdef一起使用的大寫字母的種類?

+1

'#ifdef'只是檢查是否定義了一個符號。 – clcto

+0

我將你的標題編輯爲一個實際描述某個東西的標題。在他們的搜索結果中找到這個問題的人會感謝我。 –

+0

什麼時候定義了_HAVE_BOOST?它是內置的嗎?是什麼導致它被定義? – pyrrhic

回答

3

我假定_HAVE_BOOST很簡單,就是設置爲true一個標誌...

#ifdef _HAVE_BOOST不測試_HAVE_BOOST是否true;它測試這樣的preprocessor macro是否完全定義,而不管該值。

...如果C++庫已正確導入。

是的,考慮到上下文,這個特定的宏可能意味着表示Boost是否可用,因此是否有可能依賴它。

是否有列表或文檔描述與#ifdef一起使用的大寫字母的種類?

宏可以用在頭文件或者#define指令,或在編譯命令(參見gcc例如-D選項)來定義。編譯器也可以使用predefine一些宏。

任何頭文件都可以定義宏。通常應該能夠通過閱讀文檔來查找哪些宏可以定義,或者如果您沒有文檔,可以通過自己閱讀頭文件。

如果添加了#include,會將_HAVE_BOOST設置爲true?

我覺得它不太可能在<boost>本身中定義。畢竟,在嘗試包含它之後測試Boost是否可用,將是毫無意義的。

什麼時候定義了_HAVE_BOOST?

你應該從編寫代碼的人那裏詢問。思考的另一個問題是,它是否定義?如果不是,則預處理器將刪除ifdef之間的代碼。

我的水晶球告訴我,它可能應該由構建過程的某種配置腳本來定義。例如,​​有一個宏,它將定義一個預處理器宏HAVE_header-file,如果頭存在。請注意,一開始缺少下劃線。

+1

好,完整的答案 – clcto

0

如果編譯器支持C++ 11,它將支持<random>

隨着間接包含和typedefs(或using聲明?!)的一些巧妙使用,它可以使用或不使用隨機增強。

+0

你沒有回答我的問題。 _HAVE_BOOST是一個內置於C++的宏嗎?它以前沒有在文件中定義過。 – pyrrhic

+0

詢問「_HAVE_BOOST [是]內置在C++中的宏」就像問希臘國家法定節假日是否屬於西班牙憲法的一部分。我認爲你的問題主要是關於「稍後在代碼中,有幾條語句依賴於此」。對不起解釋這個問題有點奇怪。在我的防守中,這個問題也有點奇怪:) – sehe

1

這只是意味着如果你定義了一個預處理宏「_HAVE_BOOST」,編譯器將包含boost/random.hpp。就像這樣:

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

here有關預處理指令的更多細節。

+0

#define _HAVE_BOOST在文件中不存在。這個標誌是內置的嗎? – pyrrhic

相關問題