STL原始碼剖析 P20關於STL的編譯器組態

2022-09-18 23:42:11 字數 1148 閱讀 2564

有關編譯器組態設定,由於自己在閱讀這一塊**時,老是有許多糾結,所以為了讓自己記住乙個關鍵點:有關編譯器的組態設定,並非完全精確地針對某些特定編譯器,具體移植時, 是需要做適當修改的。特此記錄個人想法及思索過程。

比如對於:

#if  defined( __sgi ) && !defined( __gnuc__ )    #if !defined( _bool )         define __stl_need_bool    #endif    #if !defined( _typename_is_keyword )         define __stl_need_typename    #endif    #ifdef _partial_specialization_of_class_templates         define __stl_class_partial_specialization    #endif    ... #endif

個人的理解是,這段**的真的目的並不是為了說明,定義了__sgi而沒有定義 __gnuc__的編譯器就必須進行接下來測試,即如果沒有定義_bool則定義__stl_need_bool, 諸如此類。

因為如果按這種方向去理解的話,我就會因此而誤解為:sgi庫本身有定義__sgi,而gnuc編譯器本身也有定義__gnuc__(實際上在gcc中測試時,是沒有定義__sgi的,但有定義__gnuc__),進而認為使用了sgi庫而又不使用gcc的其他編譯器就必定通過這一條件編譯,並進行接下來的條件編譯測試,甚至認為如果該編譯器支援bool功能,則它內部必定預設有_bool預定義識別符號,但實際上是不一定的。比如vc中如果使用sgi的話,暫且不論它是否定義了__sgi, 就_bool而言,經測試是沒有定義,但vc中有bool功能,所以如果vc中要正常使用sgi必須對sgi的config標頭檔案進行適當修改,或在自身開發環境中,新增相應預定義識別符號。

綜上,為了讓自己更好的理解stl_congig.**件,我這樣去這段示例**:若編譯器使用了sgi而本身不是gcc,則判斷是否具有bool功能,沒有則指明需要該功能,…… 如果是gcc則不用進行這些測試,因為gcc本身是支援的。所以其真正目的在於說明乙個含義,並非具體**的執行,具體對於不同編譯器,還是需要作修改的,諸如修改stl_config.h,或為編譯器本身新增預定義識別符號。

以上,是為了幫助自己理解而作的記錄,有些地方不知所云,只供自己理解,未必適合他人,還請見諒!

STL原始碼剖析

這兩天略讀完了 stl原始碼剖析 之所以是略讀,就是只看大體,不講具現 這個詞在 深度探析c 物件模型 中比較多 已經看過好幾本c 的書了,感覺c 本身設計的博大精深,而c 編譯器就更是乙個神奇的東西,換句話說,你永遠不知道c 編譯器揹著你做了哪些出乎你意料的事 不扯遠了 我主要是想看stl容器的具...

STL原始碼剖析

這兩天略讀完了 stl原始碼剖析 之所以是略讀,就是只看大體,不講具現 這個詞在 深度探析c 物件模型 中比較多 已經看過好幾本c 的書了,感覺c 本身設計的博大精深,而c 編譯器就更是乙個神奇的東西,換句話說,你永遠不知道c 編譯器揹著你做了哪些出乎你意料的事 不扯遠了 我主要是想看stl容器的具...

STL原始碼剖析

花了兩天時間略讀了一下 stl原始碼分析 看了個大體,對於細節並沒有深究。之所以想翻翻這本書,主要是想看看stl中的特性 介面卡的具體實現。看完之後收穫還是蠻大的,模板的各種組合讓我眼前一亮,下面大概總結一些內容。1.記憶體分配 sgi記憶體分配採用兩級實現,對於大記憶體塊的申請 大於128k 由第...