1.1 C 语言的起源
- Dennis Ritch
- Ken Thompson
1.2 选择 C 语言的理由
1.2.1 设计特性
- 自顶向下
- 结构化编程
- 模块化设计
1.2.2 高效性
1.2.3 可一致性
1.2.4 强大而灵活
1.2.5 面向程序员
1.2.6 缺点
- 指针
- 年度混乱代码大赛
1.3 C 语言的应用范围
1.4 计算机能做什么
- CPU 能以惊人的速度从事枯燥的工作
- 寄存器
- 指令集
1.5 高级计算机语言和编译器
1.6 语言标准
- 1987, Brian Kernighan 和 Dennis Ritchie 合著的 The C Programming Language 第一版是公认的 C 标准, 被称为 K&R C/经典 C
- Unix 实现提供的库成为了标准库
1.6.1 第1个 ANSI/ISO C 标准
- ANSI 在1989推出 C 语言和 C 标准库, 简称 C89
- ISO 在1990采用了 ANSI C, 简称 C90
C 精神:
- 信任程序员
- 不要妨碍程序员做需要做的事
- 保持语言精炼简单
- 只提供一种方法执行一项操作
- 让程序运行更快, 即使不能保证其可移植性 (针对目标计算机定义最合适的某特定操作, 而不是加强一个抽象, 统一的定义)
1.6.2 C99 标准
增加新目标:
- 支持国际化编程
- 字符集
- 调整现有实践致力于解决明显缺陷
- 为适应科学和工程项目中的关键数值计算, 提高 C 的适应性, 让 C 比 FORTRAN 更有竞争力
并非所有编译器完全实现 C99.
1.6.3 C11 标准
新的指导原则:
- 安全性
- 可选项
1.7 使用 C 语言的7个步骤
理想情况:
1.7.1 第1步: 定义程序的目标
描述问题.
1.7.2 第2步: 设计程序
选择合适的方式表示信息可以更容易地设计程序和处理数据.
1.7.3 第3步: 编写代码
1.7.4 第4步: 编译
- 编译
- 链接
1.7.5 第5步: 运行程序
1.7.5 第6步: 测试和调试程序
- 计算机行话叫 bug
1.7.7 第7步: 维护和修改代码
1.7.8 说明
- 不要忽略第1, 2步
1.8 编程机制
1.8.1 目标代码文件, 可执行文件和库
- 目标代码文件缺失启动代码
- 对于相同 CPU, 目标代码相同, 但是不同操作系统需要不同的的启动代码
- 链接器将目标代码, 系统的标准启动代码和库代码合并成一个文件, 即可执行文件
- 目标文件和可执行文件都由机器语言指令组成
1.8.2 UNIX 系统
1. 在 UNIX 系统上编辑
#include <stdio.h>
int main(void)
{
printf("A .c is used to end a C program filename.\n");
return 0;
}
2. 在 UNIX 系统上编译
$ cc inform.c
a.out
$ ./a.out
1.8.3 GNU 编译器集合和 LLVM 项目
许多使用 gcc 的系统用 cc 作为 gcc 的别名.
LLVM 是 cc 的另一个替代品:
- Clang 编译器
$ cc -v
指定 C 标准进行编译:
$ gcc -std=c99 inform.c
$ gcc -std=c1x inform.c
$ gcc -std=c11 inform.c
1.8.4 Linux 系统
$ gcc inform.c
1.8.5 PC 的命令行编译器
- Cygwin
- MinGW
1.8.6 集成开发环境 (Windows)
- Microsoft Visual Studio Express
- Pelles C
1.8.7 Windows/Linux
1.8.8 Macintosh 中的 C
- Xcode