变量声明与定义
- extrn type var_name_list: 声明,告诉解析器存在这么一个变量或者函数等
- type var_name_list:分配存储空间,
定义也是声明,声明不是定义
变量类型
基本类型、自定义类型
变量作用域
全局变量和局部变量的区别:
- 定义位置:全局变量定义在函数或者代码块外部,在程序整个声明周期内有效;局部变量定义在函数或者代码块内部。
- 作用范围:全局变量在整个程序中都有作用,但局部变量仅作用于函数内部。若函数内部的局部变量和某一全局变量重名,则局部变量的值覆盖(此作用范围内)全局变量的值,但是全局变量的值不变(在全局意义上)
- 初始化:
全局变量自动初始化,局部变量必须手动初始化。
常量
常量是固定值,可以理解为特殊的“变量”,在程序执行期间值不可改变。常量分为整数常量、浮点常量、布尔常量、字符常量、字符串常量。
常量定义
-
define 预处理器
define identifier value
- const 关键字
const type variable = value
预处理器define和const的区别
- 类型和安全检查不同: 宏定义是字符替换,没有数据类型的区别,因此替换时没有类型检查,可能产生边际效应等错误;const常量是用声明的方法创建,有类型区别,需要在编译阶段进行类型检查;
- 编译器处理不同:宏定义是一个编译时概念,在预处理阶段展开,不能对宏定义进行调试,在编译时生命周期结束;const是一个运行时概念,在程序运行中使用;
- 存储方式不同:宏定义直接替换,不分配内存,存储在代码段中;const分配内存,存储在程序的数据段中。
- 定义域不同:宏定义不受定义域限制,而const有定义域
- 定义后能够取消:宏定义可以使用#undef取消,const在定义域内永久有效。
- 是否可以作为函数参数:宏定义不能出现在参数中,const常量可以作为参数。