extern,static,頭文件

basic.cpp


basic.cpp

main.cpp


main.cpp

1.extern

extern關鍵字表示這個標識符具有External Linkage。具有External Linkage指的是:如果把main.cpp和basic.cpp鏈接在一起,如果add在main.cpp和basic.cpp中都有聲明(在basic.cpp中的聲明同時也是定義),那么這些聲明指的是同一個函數,鏈接之后是同一個GLOBAL符號,代表同一個地址。函數聲明中的extern也可以省略不寫,不寫extern的函數聲明也表示這個函數具有External Linkage。

2.static

mul函數只具有Internal Linkage,只有在basic.cpp中多次聲明才表示同一個函數,而在main.c中聲明就不表示它了。如果把basic.cpp編譯成目標文件,函數名mul在其中是一個LOCAL的符號,不參與鏈接過程,所以在鏈接時,main.cpp中用到一個External Linkage的mul函數,鏈接器卻找不到它的定義在哪兒,無法確定它的地址,也就無法做符號解析,只好報錯。

凡是被多次聲明的變量或函數,必須有且只有一個是定義,如果有多個定義,或者一個定義都沒有,鏈接器就無法完成鏈接,可以有多次聲明。

3.include 頭文件

如果在其他模塊也需要使用add這個函數,都要寫函數聲明也是很麻煩的。可以自己寫一個頭文件basic.h,然后在需要add這個函數的模塊里加入#include “basic.h”,就無需再寫函數聲明。

basic.h
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容