知识补充: 调用 __ FUNCTION__ 可以获取当前函数的标识符,可以用来区分不同函数输出的结果
例:printf("[%s]\n",FUNCTION);
调用 LINE ___ 可以获取函数所在的行号
变量:用来保存一些特定的内容,并且在程序执行过程中值会随时会发生改变的量
定义:[存储类型] 数据类型 标识符 = 值
TYPE NAME = VALUE
标识符:由字母、数字、下划线组成且不能以数以开头的一个标识序列(某块空间的名字),写标识符尽量做到见名生义
数据类型:基本数据类型+构造类型
值:注意匹配
存储类型: auto static register extern(说明型关键字)
auto: 如果变量定义的时候没有指定存储类型,则默认为auto型 ,auto型存储类型自动分配空间,自动回收空间
register: (建议型关键字)寄存器类型,只能用来定义局部变量,不能定义全局变量;大小有限制,只能定义32位大小的数据类 型,如double类型不可以,寄存器没有地址,所以一个寄存器类型的变量无法打印地址查看或使用
static: 静态型,自动初始化为 0 值 或 空值,并值其变量的值有继承性,另外,常用于修饰变量或函数(例如,main.c与func.c中都有关于 全局变量 i 的定义,为了防止冲突即重复定义,可以在func函数定义全局变量 i 的时候加上 static ,即 static int i =0;)
extern:说明型关键字,意味着不能改变被说明的变量的值
变量的生命周期和作用范围:
1)全局变量和局部变量
2)局部变量和局部变量
1)全局变量和局部变量:
1. 当全局变量与局部变量重名时,函数优先使用局部变量的值 2. 全局变量的缺陷:当全局变量关联多个函数模块的时候会出现计数错误,因为每个函数都能改变变量的值
3) 变量的存储器、作用域、链接
存储类别 | 存储期 | 作用域 | 链接 | 声明方式 |
---|---|---|---|---|
自动 auto | 自动 | 块 | 无 | 块内 |
寄存器 register | 自动 | 块 | 无 | 块内,使用关键字register |
静态外部链接(全局变量) | 静态 | 文件 | 外部 | 所有函数外 |
静态内部链接 | 静态 | 文件 | 内部 | 所有函数外,使用关键字static |
静态无连接 | 静态 | 块 | 无 | 块内,使用关键字static |