1.1 C 语言的起源

  • Dennis Ritch
  • Ken Thompson

1.2 选择 C 语言的理由

1.2.1 设计特性

  • 自顶向下
  • 结构化编程
  • 模块化设计

1.2.2 高效性

image.png

1.2.3 可一致性

1.2.4 强大而灵活

1.2.5 面向程序员

1.2.6 缺点

  • 指针
  • 年度混乱代码大赛

1.3 C 语言的应用范围

image.png

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. 信任程序员
  2. 不要妨碍程序员做需要做的事
  3. 保持语言精炼简单
  4. 只提供一种方法执行一项操作
  5. 让程序运行更快, 即使不能保证其可移植性 (针对目标计算机定义最合适的某特定操作, 而不是加强一个抽象, 统一的定义)

1.6.2 C99 标准

增加新目标:

  1. 支持国际化编程
    1. 字符集
  2. 调整现有实践致力于解决明显缺陷
  3. 为适应科学和工程项目中的关键数值计算, 提高 C 的适应性, 让 C 比 FORTRAN 更有竞争力

并非所有编译器完全实现 C99.

1.6.3 C11 标准

新的指导原则:

  • 安全性
  • 可选项

1.7 使用 C 语言的7个步骤

理想情况:

image.png

1.7.1 第1步: 定义程序的目标

描述问题.

1.7.2 第2步: 设计程序

选择合适的方式表示信息可以更容易地设计程序和处理数据.

1.7.3 第3步: 编写代码

image.png

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, 目标代码相同, 但是不同操作系统需要不同的的启动代码
  • 链接器将目标代码, 系统的标准启动代码和库代码合并成一个文件, 即可执行文件
  • 目标文件和可执行文件都由机器语言指令组成

image.png

1.8.2 UNIX 系统

1. 在 UNIX 系统上编辑

  1. #include <stdio.h>
  2. int main(void)
  3. {
  4. printf("A .c is used to end a C program filename.\n");
  5. return 0;
  6. }

2. 在 UNIX 系统上编译

$ cc inform.c
a.out

$ ./a.out

image.png

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

1.9 本书的组织结构

1.10 本书的约定

1.11 本章小结

1.12 复习题

1.13 编程练习