c语言 作用域、存储期、链接属性汇总

1、作用域

  块作用域:用{}阔起来的,从声明开始到“}” 结束

函数作用域:goto(标识符) 的作用域为整个函数。

函数原型作用域:函数声明开始,函数声明结束而结束

文件作用域:整个文件或者程序

2、链接

  无链接:即只在其作用域内可见

内链接:即在从声明到文件结束都是可见的

外链接 :多个文件或者整个程序都可见

3、存储期

静态存储期:在整个程序都是占有内存的

线程存储期:thread_local,其声明后会给每个线程分配一个单独的私有备份

自动存储期:局部变量通常都自动为auto 存储期

动态存储期:就是用new 或者malloc分配的内存,如果不主动释放,在整个程序都占有内存

4、总结

存储类别                 存储期      作用域            链接属性                      表示

自动                          自动        块                      无链接                     块内声明变量

寄存器                      自动         块                     无链接                     块内使用register修饰

静态外链接               静态         文件                  外链接                       所有函数外

静态内链接                静态        文件                   内链接                       所有函数外,用static修饰

静态无链接               静态          块                      无链接                      块内,使用static修饰

线程存储                  自动           线程                  无链接                       thread_local修饰

4、函数的存储期

  外部函数:默认都是外部函数

静态函数:使用static 修饰,内连接

内联函数:inline

5、注意

  • auto 在c中表示自动存储期
  • 但是auto在c++11 中表示自动推断类型
  • register 声明后,并不一定会存到寄存器中,他只是一种请求。及时不存在寄存器中也不能对其取地址。同时可以存为register的类型可不多,

   因为有些类型太大了,寄存器存不下。

  • 静态变量或者全局常量,都存储在静态区,在程序载入时已经执行赋值了 ,他们如果不被初始化,将会被初始化为0,存在bss段中。

6、申请内存

malloc:malloc(sizeof(xxx))

calloc:calloc(num,sizeof(xx))

realloc: realloc(p,size)

7、限定符

volatile

const:

restrict:

原文地址:https://www.cnblogs.com/tjyuanxi/p/9357652.html

时间: 2024-10-06 01:11:03

c语言 作用域、存储期、链接属性汇总的相关文章

【转】C语言中标识符的作用域、命名空间、链接属性、生命周期、存储类型

Technorati 标签: C,标识符,作用域,命名空间,链接属性,生命周期,存储类型,scope,name space,linkage,storage durations,lifetime 无论学习哪一种语言,都免不了要讨论这些问题.而且这些问题,深究起来有时也让我们很迷惑. 标识符的定义无需多讲,只需注意不仅仅是指变量,还有函数,标签等. 1. 标识符的作用域 作用域是指允许对标识符进行访问的位置范围.按照C99(章节6.2.1),C语言的作用域共有 4 种类型:文件作用域.代码块作用域.

嵌入式 Linux C语言(八)——存储类型、作用域、生命周期、链接属性

嵌入式 Linux C语言(八)--存储类型.作用域.生命周期.链接属性 一.存储类型 C语言中,每个变量和函数都有两个属性:数据类型和数据的存储类型. 变量的存储类型是指存储变量值的内存类型.变量的存储类型决定变量何时创建.何时销毁以及它的值将保持多久.计算机中有三个地方可以用于存储变量:普通内存,运行时堆和栈,硬件寄存器.变量的存储类型取决于声明变量的位置. C语言存储类别说明符: 说明符 用    法 auto 只在代码块内变量声明中被允许, 表示变量具有本地生存期 extern 出现在顶

存储类、作用域、生命周期、链接属性

1.linux下C语言程序的内存映像代码段(.text).数据段(.data).bss段.栈.堆的概念 代码段(.text) (1)对应着程序中的代码(函数),代码段在linux中又叫文本段(.text)(2)部分平台下的const修饰的变量. 数据段(.data) 1.显式初始化为非0的全局变量: 2.显式初始化为非0的static局部变量 bss段 1.显式初始化为0或者未显式初始化的全局变量: 2.显式初始化为0或未显式初始化的static局部变量. 栈 局部变量分配在栈上:函数调用传参过

7、C_存储类 & 作用域 & 生命周期 & 链接属性

概念解析 存储类 存储类就是存储类型,也就是描述C语言变量在何种地方存储. 内存有多种管理方法:栈.堆.数据段.bss段..text段······一个变量的存储类属性就是描述这个变量存储在何种内存段中. 譬如:局部变量分配在栈上,所以它的存储类就是栈:显式初始化为非0的全局变量分配在数据段,显式初始化为0和没有显示初始化(默认为0)的全局变量分配在bss段. 作用域 作用域是描述这个变量起作用的代码范围. 基本来说,C语言变量的作用域规则是代码块作用域.意思就是这个变量起作用的范围是当前的代码块

4.7 C语言的存储类,作用域,生命周期,链接属性

C语言背后的运行机制,学会了会对C语言更加熟悉,可以直接看到C语言的骨头里去. 存储类(storage class): ①什么是存储类? 存储类就是变量存储类型,即变量在内存中存储在什么段. 例如:栈:普通局部变量. 数据段(.data):初始化不为零的全局变量,静态局部变量. bss段:初始化为零 或 未初始化的全局变量. (其实bss段就是初始化为0的数据段)   代码段(.text):存放程序执行代码的一块内存区域. ②存储类相关的关键字? auto static register ext

C语言中的作用域,链接属性和存储类型

作用域 当变量在程序的某个部分被声明的时候,他只有在程序的一定渔区才能被访问,编译器可以确认4种不同类型的作用域:文件作用域,函数作用域,代码块作用域和原型作用域 1.代码块作用域:位于一对花括号之间的所有语句称为一个代码块.任何在代码块的开始位置声明的标识符都具有代码块作用域,表示他可以被这个代码块中的所有语句访问.(例子中:f,g函数,i) 2.文件作用域:任何在所有代码块之外声明的标识符都具有文件作用域,他表示这些标识符从他们的声明之处直到他所在的源文件结尾处都是可以访问的.(例子中:a,

【转】作用域、链接属性、存储类型总结--转载学习,很清晰,很详细

标识符: 首先,在讨论这三种东西之前,详细说明一下C语言中的标识符. 标识符是用户编程为变量.常量.函数.语句等指定的名字,就好比人名一样的东西. 标识符的命名规则如下: 1.只能由字母.数字.下划线组成,并且首字符不能是数字: 2.不能把C语言的关键字作为标识符: 3.对大小写敏感: 其次,需要明确,作用域和链接属性是在标识符范畴内讨论的,存储类型是在标识符中的变量范畴内讨论的. 作用域: 标识符的作用域就是程序中该标识符可以被使用的区域,由它的声明位置决定. 分为以下四类: 1.文件作用域

C语言:链接属性与存储类型

一. 链接属性 C语言中链接属性决定如何处理在不同文件中出现的标示符.标示符的作用域与它的链接属性有关,但这两个属性并不相同. 链接属性有3种: external(外部),internal(内部) 和 none(无). 1. none: 没有链接的标示符,总是被当做单独的个体,也就是说改标示符的多个声明被当做不同的实体. 2. internal: 在同一个源文件内的所有声明中都指同一个实体,但位于不同源文件的多个声明则分属不同的实体. 3. external: 标示符不论声明多少次,位于几个文件

关于extern和static关键字引出的一些关于作用域和链接属性和存储类型的问题

在进入正题前我们必须了解一些概念: 标识符:标识符不仅仅代表着变量的名字,main()函数的main也是一个标识符,这点很重要. 存储类型:即变量的存储位置及其生存周期:静态区:分为两块 .date 已显式初始化的全局变量了静态变量 .bss 存放未初始化的全局或者静态变量 注意:静态变量的初值是在编译时就进行初始化了:意思就是用static修饰的变量赋过数值的话就保存为他的初值,如果没有初始化的话就赋值为零,且整个程序只初始化一次:即不管static int i = 1:或者这 static