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中的全局变量、全局函数发生冲突。