了解C中的静态存储类

前端之家收集整理的这篇文章主要介绍了了解C中的静态存储类前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
static是全局变量的默认存储类.下面的两个变量(Count和Road)都有静态存储类.
static int Count;
int Road;
int main()
{
    printf("%d\n",Road);
    return 0;
}

我的问题是:如果默认情况下全局变量是静态的(这意味着我们将该全局变量的范围限制为该特定.c文件)那么我们如何在另一个文件中将这些变量extern?

这个问题对你们很多人来说可能是非常基本的,但我真的很困惑,想要了解正确的细节.

解决方法

在正式的C术语中,extern,static,register等说明符称为存储类说明符,但这些说明符控制的实际对象属性称为存储持续时间和链接.

在您的问题中,您似乎将这两个不相关的概念混合在一起:存储持续时间和链接.它实际上是描述对象外部可见性的链接.

文件范围中定义的所有变量都具有静态存储持续时间(无论您是否在声明中使用了关键字static).这仅仅意味着他们永远存在,但它没有说明他们的外部可见性.同时,用关键字static定义的变量具有内部链接,而没有任何关键字或关键字extern定义的变量具有外部链接.

在您的示例变量中,Road具有静态存储持续时间和外部链接,这就是您可以直接从其他翻译单元访问它的原因.变量计数具有静态存储持续时间和内部链接,这就是您无法直接从其他翻译单元访问它的原因.

如果声明一个没有存储类说明符的变量(如示例中的Road),它将被视为所谓的暂定定义,并最终解析(在您的示例中)为具有静态存储持续时间和外部链接的变量.因此,从这个角度来看,正确的说文件范围变量的默认(隐含)存储类说明符实际上是extern,而不是static.

猜你在找的C&C++相关文章