当前位置:  开发笔记 > 编程语言 > 正文

了解C中的静态存储类

如何解决《了解C中的静态存储类》经验,为你挑选了2个好方法。

static是全局变量的默认存储类.下面的两个变量(CountRoad)都有static存储类.

static int Count;
int Road;
int main()
{
    printf("%d\n", Road);
    return 0;
}

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

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



1> AnT..:

在正规C语言术语修饰符如extern,static,register等称为存储类说明符,但实际的对象属性这些说明符控制被称为存储持续时间联动.

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

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

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

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



2> Jonathan Lef..:

该变量Count只能通过这个源文件中的名称访问,因为static它位于它之前.在形式上,据说它具有内部联系(参见ISO/IEC 9899:2011§6.2.2标识符的链接).

Road如果这些文件包含等同extern int Road;于其中一个语句,则可以从其他源文件访问该变量.形式上,据说它有外部联系.

通常,大多数人会调用Count静态变量和Road全局变量.

另请参见C 中的extern变量是什么?

推荐阅读
殉情放开那只小兔子
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有