C Primer Plus阅读--章节12

C Primer Plus阅读--章节12

三个概念:作用域、链接、存储期

  • 作用域

    1. 块作用域:定义在块中的变量具有块作用域
    2. 函数作用域:仅用于goto语句的标签,即使一个标签首次出现在函数的内层块中,作用域也延申至整个函数。
    3. 函数原型作用域:函数的形参列表
    4. 文件作用域:变量定义在函数的外面,具有文件作用域从它的定义到文件末尾均可见
  • 链接:

    1. 外部链接:函数外部定义,没有使用static,在其他.c文件中使用关键字extern的一些变量。
    2. 内部链接;使用static定义在函数外部的变量。
    3. 无链接:具有块作用域、函数作用域和函数原型作用域的变量。
      注意:外部链接的文件作用域简称为"全局作用域"或者"程序作用域", 将内部链接的文件作用域称为"文件作用域"
  • 存储期:

    1. 静态存储期:执行期间一直存在,无论内外部链接(文件作用域变量,static表示的是链接属性)
    2. 线程存储期:从声明到线程结束(_Thread_local)
    3. 自动存储期:块作用域,退出块就释放内存
    4. 动态分配存储期:

存储类别

  • 自动:自动存储期,块作用域、无链接
  • 寄存器:自动存储期、块作用域、无链接(编译器会衡量是否能够使用寄存器存储,根据寄存器或者最快可用内存数量)。寄存器变量不能获取地址。
  • 静态外部链接:静态存储期、文件作用域、外部链接
  • 静态内部链接:静态存储期、文件作用域、内部链接
  • 静态无链接(块内使用static):静态存储期、块作用域、无链接

ANSI类型限定符

  • const(C90)
    • 在指针和形参声明中使用const
      • const float * pf:指针指向的值不会改变,但指针指向的地址可以改变
      • float * const pt:创建的指针pt指向的地址不能改变,但是所指向的地址中的值可以改变
      • const float * const ptr:指针指向的地址,和指向的值都不会改变
      • float const * pfc等价于const float * pfc
        const在*左侧则值不能改变,const在*右侧则指针所指向的地址不能改变
    • 对全局数据使用const
  • volatile(C90)
    • 告知计算机,代理(其他程序)可以改变该变量的值,避免编译其优化造成的数据错误。
  • restrict(C99)
    • 允许编译其优化某部分代码以更好的支持计算,只能用于指针,表明该指针是访问数据对象的唯一且初始的方式。
  • _Atomic(C11,stdatomic.c)
    • 并发程序使用,需要包含stdatomic.h和threads.h,声明为原子类型的对象执行原子操作时,其他线程不能访问
      注:多余限定符将会被省略

注意:

c 复制代码
//可以使用如下的函数定义方式,参数列表中的ANSI C限定符和静态存储标识符static可以变成如下方式
void ofmouth(int a1[const], int a2[restrict], int n);//C99
double stick(double ar[static 20]);
相关推荐
想放学的刺客4 分钟前
单片机嵌入式试题(第27期)设计可移植、可配置的外设驱动框架的关键要点
c语言·stm32·单片机·嵌入式硬件·物联网
BackCatK Chen37 分钟前
第 1 篇:软件视角扫盲|TMC2240 软件核心特性 + 学习路径(附工具清单)
c语言·stm32·单片机·学习·电机驱动·保姆级教程·tmc2240
梵刹古音1 小时前
【C语言】 格式控制符与输入输出函数
c语言·开发语言·嵌入式
VekiSon2 小时前
Linux内核驱动——基础概念与开发环境搭建
linux·运维·服务器·c语言·arm开发
无限进步_2 小时前
面试题 02.02. 返回倒数第 k 个节点 - 题解与详细分析
c语言·开发语言·数据结构·git·链表·github·visual studio
Hello World . .2 小时前
数据结构:栈和队列
c语言·开发语言·数据结构·vim
zhangx1234_4 小时前
C语言 数据在内存中的存储
c语言·开发语言
嵌入小生0075 小时前
双向链表、双向循环链表之间的异同---嵌入式入门---Linux
linux·c语言·数据结构·链表·嵌入式·小白
BoJerry7775 小时前
数据结构——单链表(不带头)【C】
c语言·开发语言·数据结构
进击的小头5 小时前
设计模式组合应用:智能硬件控制系统
c语言·设计模式