extern int i;
指明這裏的i只是聲明,否則i爲全局變量的話會看作定義,有可能違反一次定義法則(ODR)
extern foo();
將函數"在其他地方定義"變爲顯式的
同名常量可以出現在不同的編譯單元中,且值可以不一樣哦!
//------foo.c--------
const char name = 'h';
//--------------------
//--------bar.c--------
const char name = 'j';
//-----------------------
export作用
export foo() {};
export template<typename T> foo(T t) {};
告訴編譯器,在其他編譯單元中可能需要這個定義。
全局對象和非內聯函數只能有一個定義,而內聯函數可以有多個相同的定義(實際情況是多個不同的定義也可以,其實內聯函數和static函數一樣,只是在當前編譯單元有效。其實其他編譯即使單元聲明的此函數,但沒有它的定義,連接時會提示無法找到此函數。)
函數聲明和類定義可見是編譯時的需要,而(成員)函數的定義可見是連接時的需要。