Static storage class
我是C的初学者,目前正在学习数据类型修订章节。我已经解决了很多静态存储类的程序。静态存储类具有本地作用域。在下面的代码中,静态变量声明在主变量之上,即全局变量。这有可能吗?根据静态存储类的特点,O/P是正确的。
1 2 3 4 5 6 |
有人能告诉我主变量上面的静态变量声明是正确的吗?如果这是正确的,请尝试用外行语言解释。
存储类和范围是不同的。
存储类与对象的生存期或存储持续时间相关:对象的创建时间和生存期结束时间。不幸的是,由于历史原因,存储类和其他概念有些混合。存储类有一些关于某物存储位置的含义。C的发展使得在很大程度上取决于实现对存储内容的决定。通常,程序员应该只关心什么时候存储了一些东西。
存储类是一个对象的属性:实际存储的对象(值)。作用域是标识符的属性:用于引用对象(或类型或函数)的名称。
有四种存储持续时间:静态、线程、自动和已分配。作用域有四种:函数、文件、块和函数原型。它们的规则有些复杂(也依赖于链接,可以是外部的、内部的,也可以是无链接),所以我不会全部描述它们。
如果您将一个对象定义为
在函数体中声明对象时,声明中的标识符(名称)具有块范围。该名称仅在块内可见。作用域是编译时属性;它影响源代码的哪些部分可以看到名称。例如,如果函数A在运行时调用函数B,则函数B看不到函数A中的名称。即使函数A中的对象在函数B执行时存在(运行时属性),但它们的名称(编译时属性)在函数B中不可见。
函数体中的名称具有块范围,但它可以引用具有自动(块)存储持续时间的对象或具有静态(整个程序)存储持续时间的对象。
当您在函数体外部声明一个对象时,它的标识符具有文件范围。它对文件中所有以下源代码都可见。
还有一个属性叫做链接。链接是一种方法,通过这种方法,可以使不同范围中的相同标识符引用同一对象。(一个源文件中的