標頭檔案與庫檔案與菜鳥 (轉)

worldblog發表於2007-12-14
標頭檔案與庫檔案與菜鳥 (轉)[@more@]microsoft® HTML Help Workshop 4.1">

標頭檔案與庫檔案與菜鳥

taowen


先說明這完全是我教導一位菜鳥的個人。貼在此處供菜鳥們閱讀,內容粗淺。

1.為什麼我只要包括就能使用cout這樣的東西。我看過iostream裡面,只有一些宣告啊。

那是因為預設情況下,連結器會把標準庫連結到你的中。而那個庫檔案(副檔名或許是.lib,.a什麼的),其中包括了具體實現的程式碼編譯後的結果(二進位制的機器碼)。而這個標頭檔案就是開啟庫的鑰匙。

2.#include到底do了什麼?

僅僅把<>或""中的內容插入到檔案處。和你開啟標頭檔案然後ctrl-c,ctrl-v的效果是一樣的。

3.<>與""意義一樣嗎?

<>與""差不多。<>先在目錄(就是設定的include目錄)中查詢,而""則是先在工程所在的目錄中尋找。對於標準庫,第三方庫等,用<>。對於同一個工程中的其他檔案,用""。

4.標頭檔案頂部的#ifndef是幹什麼的?

透過#ifndef與#define來防止同一個檔案被反覆包含

5.多次include同一個檔案會不會有什麼問題

要看情況。對於原型,沒有什麼問題。對於函式的實現,類的定義等實際實現則不行。就是“只定義一次”原則,宣告可以有多次。

6.我在同一個工程中寫了好幾個cpp檔案和相應的標頭檔案,為什麼我僅僅包含了標頭檔案就能使用對應的.cpp檔案中的內容?

和#include類似,放在同一個工程中的cpp檔案會分別被編譯為目標檔案(什麼.obj或者.o檔案),然後都會被連結到你的程式中。

7.釋出自己寫的庫有哪些辦法?

把宣告與實現寫在同一個.hpp檔案中(如Boost的大部分)。

把宣告與實現放在不同的檔案中,提供.mak檔案給自己編譯,然後設定include和lib目錄(這個普遍用於類庫的釋出)

不釋出編譯好的.lib檔案是因為其格式並不統一。而mak檔案的使用又是菜鳥們的夢魘了


其實我也是一個菜鳥,這些基本的東西我也只是明白一點。望高手們能及時斧正其中的錯誤。


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-993317/,如需轉載,請註明出處,否則將追究法律責任。

相關文章