- 局部变量和全局变量;
- 标识符的作用域与可见性;
局部作用域:{ } 内部的标识符,变量被存在栈区,(也称为局部变量);
全局作用域:除{ }之外部分定义的变量;这种变量在全局区(静态区)(也称全局变量);
能不使用全局变量尽量不使用全局变量,能传参数尽量传参;
(int a, int b)这样的形参等价于局部变量;
int g_i 全局变量前加g,表示i是一个全局变量;如果全局变量未定义数值,则会按位模式清零,其中的数值全为0;32位全部清零;
函数名为全局变量,则函数都具有全局作用域;
- 作用域可见性的一般规则如下:
- 标识符要声明在前,引用在后;
- 在同一作用域中,不能声明同名的标识符;
- 在没有互相包含关系的不同的作用域中声明的同名标识符,互不影响;
- 如果在两个或多个具有包含关系的作用域中声明了同名标识符,则外层标识符在内层不可见;(就近原则)
- 变量的生存期;变量在计算机中存在是有时间的;
静态生存期
变量产生与程序运行周期是相同的;
(全局变量)和被static修饰的局部变量;
Static的作用是将动态变量修改为静态变量;作用于函数内部的局部变量;
静态变量特点是会保存上一次调用后其本身的值;
动态生存期
- 函数形式参数;
- 自动变量(也就是未加static声明的局部变量);
- 函数调用时的现场保护的返回值,直到return 0;的销毁;
- Auto变量(自动变量)
函数中的局部变量,如果不专门声明为static存储类别,都是动态地分配存储空间的,数据存储在动态存储区中。函数中的形参和在函数中定义的变量(包括在复合语句中定义的变量),都属此类,在调用该函数时系统会给它们分配存储空间,在函数调用结束时就自动释放这些存储空间。因此这类局部变量称为自动变量。自动变量用关键字auto作存储类别的声明;
- 用static声明局部变量
有时希望函数中的局部变量的值在函数调用结束后不消失而保留原值,即其占用的存储单元不释放,在下一次该函数调用时,该变量已有值,就是上一次函数调用结束时的值。这时就应该指定该局部变量为“静态局部变量”,用关键字static进行声明。
- Register 变量(寄存器变量)
寄存器类似于放在CPU中的存储器RAM,速度远远高于RAM;
Register仅仅只是把变量的地址放入寄存器中,但仅仅只是一个建议而不是命令;
在寄存器中的变量没有地址;
- 用extern 声明外部变量,声明某个变量的使用;
相关命令
:vsp func.c 分割出并建立一个fun.c的文件屏幕;
:set mouse=a 设置鼠标全局使用的功能;
编译时应该把所有的文件进行编译;
编译时头文件不参与编译;
总结:限制该函数的使用范围为本函数中;
- 预处理命令
编译运行的五个步骤
编辑、预处理、编译、链接、运行;
- 宏定义
2.“文件包含”处理;
所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来 即将另外的文件包含到本文件之中。C语言提供了#include命令用来实现“文件包含的操作。其一般形式为
- 条件编译
一般情况下,源程序中所有行都参加编译。但是有时希望程序中一部分内容只在满足一定条件时才进行编译,也就是对这一部分内容指定编译的条件,这就是“条件编译”有时,希望在满足某条件时对某一组语句进行编译,而当条件不满足时则编译另一组语句。
一般形式为
另一种形式