2.1编译过程几个阶段:
【预处理器】:在源代码上执行一些文本操作,例如:用实际值代替由#define指令定义的符号以及由#include指令包含的文件内容,滤掉注释。
【解析】:判断代码语句的意思,产生绝大多数的错误和警告信息的地方。
产生目标代码:目标代码是机器指令的初步形式,用于实现程序的语句。
2.2【执行】:在大多数机器里,程序使用一个运行时【堆栈】,他用于存储函数的局部变量和返回地址。程序同时可以使用【静态内存】,存储于静态 内 存中的变量在程 序的整个执行过程中将一直保留他们的值。
2.3 注释是不允许嵌套
3.4 int *pi //pi是普通的指针变量
int const *pi //pi则是指向整型常量的指针,可以修改指针的值,但不可以修改他所指向的值。
int * const pi //pi则是指向整型的常量指针,可以修改他所指向的值,但不可以修改指针的值。
int const * const pi //无论是指针本身还是他所指向的值都常量,不允许修改。
3.5作用域
1. 编译器可以确认4种不同类型的作用域:【文件作用域】,【函数作用域】,【代码块作用域】,【原型作用域】。
2.【代码块】:位于一对花括号之间的所有语句。
3.任何在代码块开始位置声明的标识符都具有【代码块作用域】。
4.任何在所有代码块之外声明的标识符都具有【文件作用域】。
5.只适用于在函数原型中声明的参数名具有【原型作用域】。
6.函数作用域只适用于语句标签,语句标签用于goto语句。一个函数中的语句标签必须唯一。
3.6链接属性有3种:【external(外部)】,【internal(内部)】,【none(无)】
1.none:总是被当做单独的个体,也就说该标识符的多个声明被当做独立不同的实体。
2.internal:该类标识符在同一源文件内的所有声明中都指同一个实体,单位于不同源文件的多个声明则分属于不同的实体。
3.external:该类标识符不论声明多少次,位于几个源文件都表示同一个实体。
3.7【存储类型】:指存储变量值的内存类型。
1.普通内存,运行时堆栈,硬件寄存器这三个地方可以存储变量。
2.凡是在任何代码块之外声明的变量总是存储于【静态内存】也称数据段中,也就是不属于堆栈内存,这类变量称为【静态变量】,静态变量在程序 运行之前创 建,在 程序的整个执行期间始终存在。它始终保持原先的值,除非给它赋一个不同的值或程序结束。
3.作用域,链接属性和存储类型总结
变量类型 声明的位置 是否存于堆栈 作用域 如果声明为static
全局 所有代码块之外 否 从声明处到文件尾 不允许从其他源文件访问
局部 代码块起始处 是 整个代码块 变量不存储与堆栈中,它的值在程序整个执行期一直保持
形式参数 函数头部 是 整个函数 不允许
4.1 break和continue语句
break和continue用于循环语句中。
break:用于永远终止循环。在执行完break之后,执行流将执行循环正常结束时将要执行的语句。
continue:用于永远终止当前执行的那次循环,在执行完continue之后,执行流将执行下一条下一次循环。
注意:这两条语句如果出现在嵌套的循环内部,它们只对最内层的循环起作用,无法影响到外层循环。要想跳出外层循环有两种方法,
一:可以使用goto语句,但是使用goto语句比较危险,我们应该避免使用goto语句。
二:把所有的循环放在一个单独的函数中,可以使用return语句离开这个函数。
4.2 当需要出现一条语句但并不需要执行任何任务时,可以使用空语句。