C语言过程性语言,
结构化c程序的设计原则:
1.自顶而下;
2.逐步细化;
3.模块化设计;
4.结构化编码。
针对嵌入式C在实现中,存在两种不同的环境:翻译环境(translation environment)和执行环境(execution envionment)。
翻译环境:源代码转换为可执行的机器之类。
执行环境:用于实际执行代码。
两种环境很多时候位于不同的机器上。如:交叉编译器(cross compiler)部署在服务器端,
它产生的可执行代码运行于不同的CPU上。
由源程序到可执行代码需要经过翻译。
翻译阶段将组成程序的每个源文件通过编译过程转换为目标代码(object code)。然后,各个目标文件由链接器(linker)绑定在一起,形成可执行程序。链接器同时也会引入C函数库及个人或他人编写的库函数。
编译过程由预处理(prepressing),编译(compilation),汇编(assembly),链接(linker)。
预处理阶段:预处理器在源代码上执行文本操作。如:将#define指令定义的符号用实际值代替,读取由#include指令包含的文件内容,删除注释,添加行号和文件名标识,便于编译器在编译时产生调试用的行号信息和编译错误及告警的行号。
gcc -E test.c -o test.i
编译阶段:源代码经过解析,判断它的语句意思。此部分产生绝大多数的错误和告警。
分为扫描,语法分析,语义分析,源代码优化(在命令行加入了要求优化选项),目标代码生成,目标代码优化,优化器(optimizer)对目标代码优化,使它效率更高。注意优化需要额外的时间。
gcc -S test.i -o test.s 或 gcc -S test.c -o test.s
汇编:由汇编器as完成,将汇编代码转换为机器可执行的指令。
as test.s -o test.o 或 gcc -c test.c -o test.o 或 gcc -g -o test.o test.c
链接:由连接器ld完成,将源代码生成目标文件,如*.ko ,*.so ,*.out等
ld *.o -o test.out
链接生成的目标文件,为最终可执行文件。