初识C语言
C语言的起源
C语言是在B语言的基础上进行设计的,初衷是将其作为程序员使用的一种编程工具,
选择C语言的理由
设计特性:自顶向下,结构化编程和模块化设计
高效性:强大的控制结构,快速,代码紧凑程序更小,可移植到其他计算机
可移植性:在一种系统中编写的C程序稍作修改或不修改就能再其他系统运行。
强大而灵活:Unix操作系统大部分是用C语言写的,其它语言的许多编译器和解释器都是用C编写的
面向程序员:程序员利用C可以访问硬件和操控内存中的位,利用丰富的运算符,让程序员简洁地表达式自己的意图
缺点:
- 涉及指针的编程错误难以察觉
- 结合大量的运算符,可以编写出让人及其费解的代码
C语言的应用范围
unix系统,游戏,嵌入式系统等
计算机能做什么
cpu:处理大部分的运算工作
RAM:存储程序和文件的工作区
机械硬盘/固态硬盘:永久内存存储设备
还有各种外设:键盘/鼠标等
cpu工作原理:从内存中获取并执行一条指令,如此以往,cpu的工作区由若干个寄存器组成,每个寄存器都可以储存一个数字
高级计算机语言和编译器
编译器是把高级语言程序翻译成计算机能理解的机器语言指令集的程序,使用合适的编译器或编译器集,便可把一种高级语言程序转换成供各种各种不同类型cpu使用的机器语言程序,总的来说,高级语言不受限于特定的cpu或指令集
语言标准
标准的目的是:为了让一个C程序运行在任何C实现中都应该相同
C89/C90
C99
C11
编程机制
目标代码文件、可执行文件和库
源代码 -> 可执行文件:
目标代码文件:编译器把源代码转换成机器语言代码,并把结果放在目标代码文件链接器作用:把目标代码和系统的标准启动代码(充当着程序和操作系统之间的接口)和库代码这3部分合并成一个文件,就是可执行文件
库代码:对于库代码,链接器只会把程序中要用到的库函数代码提取出来,库函数存储在被称为库的文件中,库文件中有许多函数的目标代码,也就是说库文件中的函数机器语言代码
目标文件和可执行文件都是由机器语言指令组成的,目标文件中只包含编译器为你编写的代码翻译的机器语言代码,可执行文件中还包含你编写的程序中使用的库函数和启动代码的机器代码
unix系统
编译.c文件之后会生成一个.out文件,.out文件就是程序的可执行文件,如果要储存.out文件,需要进行重命名。
目标代码文件是.o,一旦链接器生成了完整的可执行程序,会将其删除
建议:如果原始程序有多个源代码文件,则保留目标代码文件
GNU和LLVM
GNU:GNU’s Not Unix 是一个开发大量免费UNIX软件的集合,gcc c编译器是这个项目的产品之一,使用gcc命令便可嗲用GCC C编译器,许多使用gcc的系统都用cc作为gcc的别名
LLVM是与编译器相关的开源软件集合,代表产品Clang编译器处理C代码
各系统使用cc别名来代替gcc或clang命令