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