`

C中存储类,链接,作用域

阅读更多

C中存储类,链接,作用域

C中变量按照不同的标准有不同的分类方式,总的来说主要有三大类:存储周期,作用域,链接。

 

作用域:

作用域描述了程序中可以访问一个标志符的一个或多个区域。目前主要包括以下:

文件作用域:在所有函数之外定义的变量具有文件作用域。

函数原型作用域:从变量定义到原型声明的末尾。注意此时可以不写变量具体名称,编译器只关注变量的类型,如下(两者等价)

 

 

int showtime ( int time);
int showtime ( int );

 

 

代码块作用域:在某一函数代码段内定义的变量具有代码块作由域,当程序离开该代码块后变量失去作用。

 

链接:

一个c变量具有以下链接之一:外部链接,内部链接或空链接

具有代码块和函数原型的存储周期的变量具有空链接,这意味着他们是有其定义所在的代码块或函数原型所私有的。具有文件作用域的变量可能具有外部链接或内部链接。一个具有外部链接的变量在一个程序包含的多个文件中任意使用;具有内部链接的变量只能在本文件内部的所有函数内使用。内部链接是通过关键字static来说明:

 

 

 

int time=6;             //文件作用域,外部链接
static int time=6;    //文件作用域,内部链接
int main()
{
…
}

  

存储周期:

一个c变量具有两种存储周期:静态存储周期和自动存储周期,如果一个变量具有静态存储周期,它在程序执行期间将一直存在。具有文件作用域的变量具有静态存储周期;而具有代码块作用域的变量一般具有自动存储周期,当程序进入定义这些变量的代码块时,将为这些变量分配内存,当退出这个代码时将释放其内存。

 

C根据以上这个概念定义了5个存储类,如下:

 

 

存储类                  

时期

作用域

链接

声明方式                            

自动

自动

代码块

代码块内

寄存器

自动

代码块

代码块内,使用关键字register

具有外部链接的静态

静态

文件

外部

所有函数之外

具有内部链接的静态

静态

文件

内部

所有函数之外,使用static

空链接静态

静态

代码块

代码块内,使用static

 

 

注意:

说明符static在用于具有代码块作用域的变量时,使该变量具有静态存储周期,从而使其在程序运行期间一直存在,该变量具有代码块作用域和空链接。当static用于文件作用域的变量的声明时,表明该变量具有内部链接。当使用static声明或定义一个函数时,表明创建为一个特定模块所私有的函数,从而避免可能的名字冲突。

分享到:
评论

相关推荐

    c 存储类 链接 内存管理 文件输入输出 结构类型,函数指针

    首先,存储类是C语言中定义变量、函数和其他标识符的一种方式,它决定了变量的生命周期和作用域。存储类主要有四种:自动(auto)、静态(static)、外部(extern)和寄存器(register)。自动变量在函数内部定义,...

    变量的存储小结

    综上所述,了解和掌握C语言中的变量存储类、类型、存在期和作用域,对于编写高效、可靠的程序至关重要。这不仅仅涉及简单的语法知识,还关系到内存管理、程序设计思想以及代码的可维护性。对于初学者而言,通过理解...

    2023-04-06-项目笔记 - 第六十六阶段 - 4.4.2.64全局变量的作用域-64 -2024.03.08

    2. **文件作用域与外部链接**:当一个全局变量在一个源文件中定义时,其他源文件可以通过`extern`关键字来声明它,从而访问这个全局变量。这样做的前提是两个文件都被编译并链接到同一个可执行文件中。 ```c // ...

    《c语言深度解析》第3、4章 存储类、生命周期、作用域、链接域,指针与函数

    课程内容:第3章:存储类与auto、static、register关键字指令、常量、变量的生命周期变量与函数的作用域链接域与extern、static关键字声明的意义第4章:存储空间、符号、地址一级指针与多级指针野指针与段错误void *...

    C语言中static的作用.pdf

    2. 静态变量的链接属性:当static关键字用于文件作用域的变量或函数声明时,它指定变量或函数具有内部链接属性。这意味着该变量或函数只能在定义它的源文件内部访问,不能被其他源文件引用,提供了一种模块化的封装...

    C存储类型和类型限定符

    C语言的存储类型和类型限定符是编程时非常重要的概念,它们影响着变量的生命周期、作用域和存储位置。下面是对这些概念的详细说明: **存储类型** 1. **自动存储类(Automatic)**:这类对象在程序块(如函数内部)...

    C语言中静态和全局的区别

    在C语言中,不同的存储类说明符(auto、register、extern、static)决定了变量或函数的存储期以及作用域。auto和register说明符对应的是自动存储期,意味着变量在程序块执行时存在,程序块结束后变量就被销毁。...

    auto、register、static、extern等存储类修饰符的区别.

    3. **无链接**:通常指的是在函数内部声明的`auto`、`register`变量以及函数参数,这些变量的作用域仅限于函数内部,一旦函数执行完毕,它们就会消失。 #### 二、对象的生存周期(Lifetime) 对象的生存周期是指...

    c语言课件PPT和源代码

    课件中的“C变量的作用域,和存储空间分配2.doc”和“C变量的作用域,和存储空间分配.doc”主要讲解了C语言中的变量管理。变量在程序中用于存储数据,它们有不同的作用域,包括局部作用域、全局作用域和文件作用域。...

    c语言高级篇.pdf

    C语言高级篇主要介绍了C语言在高级层面的知识点和高级特性,内容涵盖变量的作用域、存储类、复合数据类型(如数组和结构体)的高级用法、指针、动态内存管理以及函数的深入理解等。 1. 变量作用域和存储类 C语言...

    C语言编码规范(C_Coding_Standard)

    这表示标识符应当在内部作用域中声明,而不是在外层作用域中,以避免潜在的作用域污染问题。使用内部作用域的标识符可以提高代码的清晰度,并且可以更好地控制变量和函数的可见性。 综合以上内容,这些规范的目的是...

    从C和C++到Java.pdf

    C和C++中的基本数据类型和存储类关键字的使用,以及它们在程序中的作用域和链接属性。Java则采用了一套更为统一和简化的类型系统,例如,Java中的所有整数类型都是对象。 2. 内存管理: C和C++需要程序员手动管理...

    C语言专题精讲篇--笔记汇总.pdf

    7. 存储类&作用域&生命周期&链接属性:这些C语言概念影响着变量和函数的存储方式、访问范围、生命周期和如何与其他模块链接。理解这些概念有助于编写出结构清晰、效率高、易于维护的程序。 8. 操作系统原理:了解...

    C ISO/IEC 9899:2011 2011最新

    C语言中存在多种作用域,如函数作用域、块作用域等,每种作用域决定了标识符在何处可用。 - **链接属性**:描述标识符在不同源文件间的共享特性。链接属性分为内部链接和外部链接两种类型,内部链接仅限于单个源文件...

    C语言提高大讲解

    内存大话题 位操作 指针—精髓 C语言复杂表达式 数组&字符串&结构体&共用体&枚举 C语言宏定义与预处理、函数和函数库 存储类&作用域&生命周期&链接属性 一些杂散但值得讨论的问题 链表&状态机与多线程 增补知识

    C++第三次作业3

    C++中的四种作用域包括:函数原型作用域、局部作用域、类作用域和文件作用域。函数原型作用域指的是函数参数和返回类型的定义所在范围。局部作用域通常在函数内部,仅在该函数内部有效。类作用域内的成员变量和函数...

    MISRA C 2012规范.pdf

    在C/C++中,声明和定义的区别尤为重要,特别是在区分变量和函数的作用域以及链接属性时。 MISRA C规范将变量和函数的连接/链接属性分为三类:外部连接、内部连接和无连接。外部连接指的是全局作用域内的变量和函数...

    C 语言基础精讲ppt_C语言_

    8. **第12章 C语言中用户标识符的作用域和存储类**: - 作用域规则:了解全局变量、局部变量和文件作用域的概念。 - 存储类别:理解`auto`、`static`、`extern`和`register`的存储类别特性。 9. **第14章 结构体...

    江苏省二级(C语言)考试真题重点题型分类总结ppt

    江苏省计算机二级C语言考试的重点题型主要涵盖了几大核心领域,包括线性表的操作、文件操作、递归问题、字符串处理、变量作用域与静态变量、数列或数字处理以及排序问题。以下是对这些知识点的详细说明: 1. **...

    C语言经典面试题

    这些概念包括了变量的作用域与存储类,进程和线程的区别以及它们的状态,进程间通信的机制,以及gcc和gdb这两款在C语言编程中经常使用的工具。 首先,我们从变量的作用域和存储类开始。在C语言中,静态变量(static...

Global site tag (gtag.js) - Google Analytics