当前位置:嗨网首页>书籍在线阅读

10-内部链接的静态变量

  
选择背景色: 黄橙 洋红 淡粉 水蓝 草绿 白色 选择字体: 宋体 黑体 微软雅黑 楷体 选择字体大小: 恢复默认

12.1.8 内部链接的静态变量

该存储类别的变量具有静态存储期、文件作用域和内部链接。在所有函数外部(这点与外部变量相同),用存储类别说明符 static 定义的变量具有这种存储类别:

static int svil = 1;    // 静态变量,内部链接
int main(void)
{

这种变量过去称为外部静态变量(external static variable),但是这个术语有点自相矛盾(这些变量具有内部链接)。但是,没有合适的新简称,所以只能用内部链接的静态变量(static variable with internal linkage)。普通的外部变量可用于同一程序中任意文件中的函数,但是内部链接的静态变量只能用于同一个文件中的函数。可以使用存储类别说明符 extern ,在函数中重复声明任何具有文件作用域的变量。这样的声明并不会改变其链接属性。考虑下面的代码:

int traveler = 1;            // 外部链接
static int stayhome = 1;     // 内部链接
int main()
{
     extern int traveler;    // 使用定义在别处的 traveler
     extern int stayhome;    // 使用定义在别处的 stayhome
     ...

对于该程序所在的翻译单元, trvelerstayhome 都具有文件作用域,但是只有 traveler 可用于其他翻译单元(因为它具有外部链接)。这两个声明都使用了 extern 关键字,指明了 main() 中使用的这两个变量的定义都在别处,但是这并未改变 stayhome 的内部链接属性。