typedef int Int; //在a.cpp中重聲明一個int類型別名,在連接時不會發生錯誤 enum Color{blue}; //在a.cpp中重定義了一個enum Color,在連接時不會發生錯誤 const Int i =blue; //const常量定義,內部連接 union X //union定義,內部連接 { long a; char b[10]; }; b)名字空間中靜態自由函數、靜態友元函數、靜態變量、const常量定義有內部連接
// main.cpp
namespace test { int foo(); //函數聲明,內部連接 static int i = 0; //名字空間靜態變量定義,內部連接 static int foo() { return 0;} //名字空間靜態函數定義,內部連接 }
static int i = 0; //全局靜態變量定義,內部連接 static int foo() {return 1;} //全局靜態函數定義,內部連接 const int k = 0; //全局const常量定義,內部連接 int main(void) { return 0; }
//a.cpp
namespace test { int i = 0; //名字空間變量定義,外部連接 int foo() {return 0;} //名字空間函數定義,外部連接 }
int i = 0; //全局變量定義,外部連接 int k = 0; //全局變量定義,外部連接 int foo() { return 2;} //全局函數定義,外部連接 在全局名字空間中,main.cpp中定義了靜態變量i,常量k,及靜態自由函數foo等,這些都有內部連接。假如你將這些變量或函數的static或是const修飾符去掉,在連接時就會現multiply defined symbols錯誤,它們與a.cpp中的全局變量、全局函數發生沖突。