局部作用域 :
在一个函数内部定义的变量是内部变量,它只在本函数范围内有效,也就是说只有在本函数内才能使用它们,在此函数以外是不能使用这些变量的。
全局作用域:
不在任何花括号为全局作用域(定义的变量为全局变量)全局变量可以为本文件中其他函数所共用。它的有效范围为从定义变量的位置开始到本源文件结束。
全局变量能代替函数实现参数传递
若全局变量未被初始化,系统48bit自动清0(位模式清0);
四个规则:
1.标识符必须先定义在使用
2.在同一作用域中,不得定义同名标识符
3.没有包含关系的作用域中,定义的同名标识符互不影响
4..在两个或两个具有包含关系的不同作用域中定义的同名标识符,外层标识符在内层不可见(就近原则)
静态生存期:与程序运行周期相同 (全局变量和static)
static
1. 将局部变量的动态生存区修饰为静态生存区
2.在全局变量或函数前加static会限制此函数为本函数.c所用
动态生存期:1.函数形式参数,在调用函数时给形参分配存储空间2.自动变量(未加static声明的局部变量3.函数调用时的现场保护和返回地址等。
auto:空间开辟和销毁是自动的
register :寄存器
例:register int i
建议将i放在寄存器中 取地址i(&i)将会引发编译报错(CPU没有地址)
extern 声明某个函数
若主调函数放被调函数之前,会出现警告,需要对该函数进行声明
外部变量是在函数的外部定义的全局变量,它的作用域是从变量的定义处开始,到本程序文件的末尾。在此作用域内,全局变量可以为程序中各个函数所引用。编译时将外部变量分配在静态存储区。有时需要用extern来声明外部变量,以扩展外部变量的作用域
头文件中只放声明,不放定义
预处理
(带#号)所有的预处理都是简单的无脑的文本替换
宏定义 不加: 要求宏名必须大写 -E要求编译器只做预处理,不编译
分为:带参宏 不带参宏(只有宏名 没有内容 表明定义过)
带参数的宏定义不是进行简单的字符串替换,还要进行参数替换。其定义的一般形式为:
#define宏名(参数表)字符串
字符串中包含在括号中所指定的参数。
带参宏效率高于函数,但不利于代码复用性
文件包含
所谓“文件包含”处理是指一个源文件可以将另外一个源文件的全部内容包含进来,即将另外的文件包含到本文件之中。C语言提供了#include命令用来实现“文件包含的操作。其一般形式为
尖括号 include文件找
双引号 一般与自己文件所在目录一致
条件编译
注释
#if0
#end if
若不需要 注释掉宏即可
#ifndef
避免同一个头文件被多次包含