C標頭檔如何來關聯源檔案?

來源:互聯網
上載者:User

標籤:

這個問題實際上是說,已知標頭檔“a.h”聲明了一系列函數(僅有函數原型,沒有函數實現),“b.cpp”中實現了這些函數,那麼如果我想在“c.cpp”中使用“a.h”中聲明的這些在“b.cpp”中實現的函數,通常都是在“c.cpp”中使用#include “a.h”,那麼c.cpp是怎樣找到b.cpp中的實現呢?
其實.cpp和.h檔案名稱沒有任何直接關係,很多編譯器都可以接受其他副檔名。
編譯器預先處理時,要對#include命令進行“檔案包含處理”:將headfile.h的全部內容複寫到#include “headfile.h”處。這也正說明了,為什麼很多編譯器並不care到底這個檔案的尾碼名是什麼----因為#include預先處理就是完成了一個“複製並插入代碼”的工作。
程式編譯的時候,並不會去找b.cpp檔案中的函數實現,只有在link的時候才進行這個工作。我們在b.cpp或c.cpp中用#include “a.h”實際上是引入相關聲明,使得編譯可以通過,程式並不關心實現是在哪裡,是怎麼實現的。源檔案編譯後成生了目標檔案(.o或.obj檔案),目標檔案中,這些函數和變數就視作一個個符號。在link的時候,需要在makefile裡面說明需要串連哪個.o或.obj檔案(在這裡是b.cpp產生的.o或.obj檔案),此時,連接器會去這個.o或.obj檔案中找在b.cpp中實現的函數,再把他們build到makefile中指定的那個可以執行檔案中。
在VC中,一幫情況下不需要自己寫makefile,只需要將需要的檔案都包括在project中,VC會自動幫你把makefile寫好。
通常,編譯器會在每個.o或.obj檔案中都去找一下所需要的符號,而不是只在某個檔案中找或者說找到一個就不找了。因此,如果在幾個不同檔案中實現了同一個函數,或者定義了同一個全域變數,連結的時候就會提示“redefined”.

C標頭檔如何來關聯源檔案?

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.