识别名称的外部连接和程序的每个编译单元都有联系。比如:函数通常不被定义为静态的全局对象,常量对象可以定义为枚举类型等等。
下面列举了一些识别名称的外部连接方式:
int n; //global non-static,
hence external linkage
class C
{
void f(); // member functions
static int n;// static data members
};
extern const K; //defined in a different translation
unit
void func ();
namespace NS
{
class D{}; // qualified name NS::D has external
linkage
}
enum DIR
{
Up,
Down
} // DIR, Up and Down have external linkage
识别名称的内部连接仅存在于编译单元的定义中。在一个命名空间中定义一个静态对象,那么这个命名空间的连接类型就是内部连接。匿名连接的成员、匿名命名空间的成员、typedef类型名,或者常量变量是不能定义成外部的。
下面举例说明识别名称的内部连接方式:
static void f(); //a static
function
static int q; //a static object declared in global scope
namespace //members of anonymous namespace
{
class C{};
int x;
}
const M=1000; //const object not declared extern
union{ //members of an anonymous union
int x;
float y;
};
typedefint I; // typedef names