函数本质:一段二进制可执行代码,函数名是一个标号,等于内存中存储函数代码的内存空间的首地址。
函数调用:first 将参数压入栈帧 second 需要保存寄存器的值 third 保存返回地址
fourth 造成跳转
变量存储优化:全局变量存储在内存中,局部变量存储在栈上。
变量的存储类别: auto:自动变量,若忽略变量存储类别,编译器自动认为为auto类型。
register:寄存器变量,此类别的变量会被优先分配寄存器。通常循环因子被分配寄存器。
extern:外部变量,即全局变量,不会因为栈帧的消失而消失。存储在内存的数据段上。只是让他
文件中的程序可以引用改变量。不改变生命周期。
static:静态变量,存储在数据段上。静态全部变量的作用域——仅限于该文件,静态局部变量的做作 用域———定义所在的符合语句内。
static的经典作用:1 改变变量的生命期 2 实现封装和模块化设计(list.h操作函数的接口声明)
链接:使程序的模块化更强,代码更易于分类管理。
定义and声明:int a;//声明,告知编译器该变量的存在,不分配存储空间
int b=1;//定义
符号解析规则
*不允许有多个符号的定义,这里的符号指的是变量或者函数。
*如果有一个符号定义和多个符号声明,则选择被定义的符号。
*如果有多个符号的声明,则从其中任选一个作为符号的定义。