C 隨手記 include漫談

2021-07-23 04:29:26 字數 2294 閱讀 3652

使用c++有一段時間了,但和c的區別卻一直沒有注意過。可以說,自己用的一直都是混合的c和c++。自我提公升從細節做起,以後要注重**的規範性。今天就從最基本的include標頭檔案開始改善。

常見的標頭檔案包含有以下幾種方式:

#include

#include

#include"pid.h"

#include

首先說下include標頭檔案時<>和「」區別。

<>引用的是編譯器類庫路徑裡面的標頭檔案,一般都是庫自帶的標頭檔案。

「」會先在當前工程目錄下搜尋該標頭檔案,若沒有再去系統自帶庫的頭檔案目錄裡去搜尋。

所以為了提高搜尋效率,自定義標頭檔案要正確引用。

再來說下include中有無.h的區別。

首先要指出,標頭檔案中帶.h是c的做法,新標準中c++所有的標頭檔案是不帶.h的,c++要相容c的標準庫,由此帶來一系列問題。

·對c++而言,它繼續支援標準c標頭檔案如等及舊的c++標頭檔案等,但標頭檔案的內容不在命名空間std中。

· 新的c++標頭檔案如

包含的基本功能和對應的舊標頭檔案相同,但標頭檔案的內容在名字空間std中。(在標準化的過程中,庫中有些部分的細節被修改了,所以舊標頭檔案和新標頭檔案中的實體不一定完全對應。)

· 具有c庫功能的新c++標頭檔案具有如這樣的名字,它們提供的內容和相應的舊c標頭檔案相同,只是內容在std中。

但string是個例外。

是舊的c標頭檔案,對應的是基於char*的字串處理函式;是包裝了std的c++標頭檔案,對應的是新的string類;是對應於舊c標頭檔案的std版本。儘管在c++中包含string.h是允許的,但c++標準建議用標頭檔案cstring來替代string.h 。

原因**自網上):c++標準庫很大。非常大。難以置信的大。怎麼個**?這麼說吧:在c++標準中,關於標準庫的規格說明佔了密密麻麻300 多頁,這還不包括標準c 庫,後者只是」作為參考」(老實說,原文就是用的這個詞)包含在c++庫中。當然,並非總是越大越好,但在現在的情況下,確實越大越好,因為大的庫會包含大量的功能。標準庫中的功能越多,開發自己的應用程式時能借助的功能就越多。c++庫並非提供了一切(很明顯的是,沒有提供併發和圖形使用者介面的支援),但確實提供了很多。幾乎任何事你都可以求助於它。在歸納標準庫中有些什麼之前,需要介紹一下它是如何組織的。因為標準庫中東西如此之多,你(或象你一樣的其他什麼人)所選擇的類名或函式名就很有可能和標準庫中的某個名字相同。為了避免這種情況所造成的名字衝突,實際上標準庫中的一切都被放在名字空間std 中(參見條款28)。但這帶來了乙個新問題。無數現有的c++**都依賴於使用了多年的偽標準庫中的功能,例如,宣告在,,等標頭檔案中的功能。現有軟體沒有針對使用名字空間而進行設計,如果用std 來包裝標準庫導致現有**不能用,將是一種可恥行為。

(這種釜底抽薪的做法會讓現有**的程式設計師說出比」可恥」 更難聽的話)懾於被激怒的程式設計師會產生的破壞力,標準委員會決定為包裝了std 的那部分標準庫構件建立新的頭檔名。生成新標頭檔案的方法僅僅是將現有c++頭檔名中的.h 去掉,方法本身不重要,正如最後產生的結果不一致也並不重要一樣。所以變成了變成了,等等。對於c 標頭檔案,採用同樣的方法,但在每個名字前還要新增乙個c。所以c 的變成了變成了,等等。最後一點是,舊的c++標頭檔案是官方所反對使用的(即,明確列出不再支援),但舊的c 標頭檔案則沒有(以保持對c 的相容性)。實際上,編譯器製造商不會停止對客戶現有軟體提供支援,所以可以預計,舊的c++標頭檔案在未來幾年內還是會被支援。所以,實際來說,下面是c++標頭檔案的現狀:舊的c++頭檔名如將會繼續被支援,儘管它們不在官方標準中。這些標頭檔案的內容不在名字空間std 中。新的c++標頭檔案如包含的基本功能和對應的舊標頭檔案相同,但標頭檔案的內容在名字空間std 中。(在標準化的過程中,庫中有些部分的細節被修改了,所以舊標頭檔案和新標頭檔案中的實體不一定完全對應。)標準c 標頭檔案如繼續被支援。標頭檔案的內容不在std 中。具有c 庫功能的新c++標頭檔案具有如這樣的名字。它們提供的內容和相應的舊c 標頭檔案相同,只是內容在std 中。所有這些初看有點怪,但不難習慣它。最大的挑戰是把字串標頭檔案理清楚:是舊的c 標頭檔案,對應的是基於char*的字串處理函式;是包裝了std 的c++標頭檔案,對應的是新的string 類;是對應於舊c 標頭檔案的std 版本。

c 基礎隨手記事

c 基礎隨手記事 1 深拷貝與淺拷貝 假若沒有自定義拷貝建構函式,系統會自動分配拷貝建構函式,但是這是淺拷貝 拷貝函式形式 ceexample const ceexample a 拷貝函式在以下情況被呼叫 a 乙個物件以值傳遞方式傳入函式體 b 乙個物件以值傳遞方式作為結果從函式返回 c 乙個物件用...

記憶體隨手記

1,view handler activity conetxt 不可被靜態方法引用,會無法銷毀 引發記憶體問題。2,bitmap 在控制項不需要後,立即強制reclery。3,一些過載的方法,在不同廠商的rom存在初始化順序不同,需要嚴謹對待。4,view的載入不一定要在主線程載入。只是addvie...

架構隨手記

部分摘自 架構實戰 一書,紅色部分為個人見解。1架構與設計 所有的架構都是設計,但並不是所有的設計都是架構。架構代表塑造乙個系統的重要設計決策,這裡的重要性通過改變所需要的成本來衡量。有此可見架構所要做的是要吧其中關鍵 核心的部分組織起來 2架構師不僅對關鍵的功能性需求感興趣,還對系統質量 如效能 ...