頭文件與庫文件與菜鳥
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