basic.cpp

basic.cpp
main.cpp

main.cpp
1.extern
extern關(guān)鍵字表示這個標(biāo)識符具有External Linkage。具有External Linkage指的是:如果把main.cpp和basic.cpp鏈接在一起,如果add在main.cpp和basic.cpp中都有聲明(在basic.cpp中的聲明同時也是定義),那么這些聲明指的是同一個函數(shù),鏈接之后是同一個GLOBAL符號,代表同一個地址。函數(shù)聲明中的extern也可以省略不寫,不寫extern的函數(shù)聲明也表示這個函數(shù)具有External Linkage。
2.static
mul函數(shù)只具有Internal Linkage,只有在basic.cpp中多次聲明才表示同一個函數(shù),而在main.c中聲明就不表示它了。如果把basic.cpp編譯成目標(biāo)文件,函數(shù)名mul在其中是一個LOCAL的符號,不參與鏈接過程,所以在鏈接時,main.cpp中用到一個External Linkage的mul函數(shù),鏈接器卻找不到它的定義在哪兒,無法確定它的地址,也就無法做符號解析,只好報錯。
凡是被多次聲明的變量或函數(shù),必須有且只有一個是定義,如果有多個定義,或者一個定義都沒有,鏈接器就無法完成鏈接,可以有多次聲明。
3.include 頭文件
如果在其他模塊也需要使用add這個函數(shù),都要寫函數(shù)聲明也是很麻煩的??梢宰约簩懸粋€頭文件basic.h,然后在需要add這個函數(shù)的模塊里加入#include “basic.h”,就無需再寫函數(shù)聲明。

basic.h