頭文件與庫文件與菜鳥

頭文件與庫文件與菜鳥

taowen


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

1.爲什麼我只要包括<iostream>就能使用cout這樣的東西。我看過iostream裏面,只有一些聲明啊。

那是因爲默認情況下,鏈接器會把標準庫鏈接到你的程序中。而那個庫文件(擴展名或許是.lib,.a什麼的),其中包括了具體實現的代碼編譯後的結果(二進制的機器碼)。而<iostream>這個頭文件就是打開庫的鑰匙。

2.#include到底do了什麼?

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

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

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

4.頭文件頂部的#ifndef是幹什麼的?

通過#ifndef與#define來防止同一個文件被反覆包含

5.多次include同一個文件會不會有什麼問題

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

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

和#include<iostream>類似,放在同一個工程中的cpp文件會分別被編譯爲目標文件(什麼.obj或者.o文件),然後都會被鏈接到你的程序中。

7.發佈自己寫的庫有哪些辦法?

把聲明與實現寫在同一個.hpp文件中(如Boost的大部分)。

把聲明與實現放在不同的文件中,提供.mak文件給用戶自己編譯,然後設置include和lib目錄(這個普遍用於類庫的發佈)

不發佈編譯好的.lib文件是因爲其格式並不統一。而mak文件的使用又是菜鳥們的夢魘了


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

taowen.cn.st
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章