C语言基础概念
环境
翻译环境
作用:源代码被转换为可执行的机器指令
翻译阶段步骤:
- 一个程序的每个源文件通过编译分别转换为目标代码(Object code)
- 各个目标文件由链接器(linker)捆绑在一起,形成一个单一可执行的程序 注:linker不仅会引入C标准库在该程序中用到的函数,也会引入用户自定义库中的函数。
编译阶段步骤:
- 预处理器处理:在源代码中进行相关文本操作,如用真值代替#define定义的符号和#include包含的内容
- 源代码进行解析(parse):判断语句的意思,大多数的错误和警告均出现于此阶段
- 生成目标代码 注:如果编译命令中加入优化的选项,那么优化器就会对目标代码进一步进行处理,使其效率更高。 在程序调试完毕生成产品之前,一般不进行优化。
编译和链接相关命令(Unix):
- 编译并链接一个完全包含于一个源文件的C程序:cc program.c 注:中间生成的目标文件在链接完成后自动删除
- 编译并链接几个C源文件:cc main.c sort.c lookup.c
- 编译一个c源文件并将其和显存目标文件进行链接: cc main.o lookup.o sort.c
- 编译单个C源文件: cc -c pogram.c
- 编译几个C源文件,并为其各自生成一个目标带码: cc -c main.c sort.c lookup.c
- 链接几个目标文件:cc main.o sort.o lookup.o
- 产生可执行程序的命令均可加上“-o name”选项,从而将执行文件保存为name.out中
执行环境
作用:用于实际执行代码
执行步骤:
- 程序会载入到内存(宿主环境:这个过程由操作系统完成,那些不在堆栈中存储且无处置的变量将取得初始值。 独立环境:手工安排,可能是把可执行代码置入只读内存(ROM)来完成)
- 程序开始执行:系统有一个小型启动程序和程序链接在一起,负责处理日常事务,如收集命令行参数以便程序能访问它们。接着,调用main函数。
- 执行程序代码:运行时堆栈,用于存储函数的局部变量和返回地址。静态内存,静态变量中的值在程序运行过程中一直保存。
- 程序终止:正常终止和非正常终止
词法规则
字符
转义字符:
- \a 警告
- \b 退格
- \f 进纸
- \n换行
- \f回车、
- \t水平制表
- \v垂直制表
- \ddd 表示1-3个八进制数字
- \xddd 十六进制数
注释
/* */ 注:注释不能嵌套