一、內鏈接與外鏈接的最大區別是其查找某個定義時,所採用的策略。函數
內鏈接:spa
對這個定義的訪問被侷限在當前編譯單元,其餘編譯單元沒法訪問,因此在鏈接時,它不會和其它的編譯對象(.o/.obj)對象做比較,因此這些對象,也不能經過extern來訪問。(static、const、類的成員/函數)對象
外鏈接:編譯
可被其餘單元訪問,那麼在鏈接時,會在其它編譯對象中查找,判斷是否重複,是否被定義。class
二、外鏈接:引用
即在聲明時使用extern,並給出定義,在其它文件中使用時,使用extern加上聲明就可static
如:文件
在 1.cpp:co
extern int num = 111;錯誤
void Test(){}
在 2.cpp:
extern int num; // 此處引用1.cpp的num
extern void Test();
三、內鏈接:
在1.cpp中:
static int a = 3;
const int b = 4;
class A
{
int c;
void Test(){}
};
在2.cpp中:
static int a = 5;
const int b = 6;
class B
{
int c;
void Test(){}
};
此時不會報重複定義的錯誤,由於其查找就在當前文件中,不會去管其它文件中的定義。