001 初识C语言

208 阅读5分钟
  • 简单历史
  • 优点和缺点
  • 编写程序的步骤
  • 编程机制

1.1 C语言的起源

1972年,贝尔实验室的丹尼斯·里奇(Dennis Ritch)和肯·汤普逊(ken Thompson)开发UNIX操作系统时在B语言(作者汤普逊)的基础上设计了C语言。

1.2 优点和缺点

1.2.1 优点

  • 设计特性

    融合了计算机科学理论和实践的控制特性。适用于自顶向下的规划、结构化编程和模块化设计。

  • 高效

    利用了当前的计算机特性,使得C程序相对更紧凑,运行速度快。C具有汇编语言才具有的微调控制能力。

  • 可移植

    C是可移植的语言。在一中系统中编写的C程序稍作修改或不修改就能在其他系统运行,极大减少了开发周期,减少了重复性的工作。

  • 适用性强

    C语言能胜任很多场景。比如操作系统的开发、编程语言开发、科学计算、动画特效。

  • 面向程序员

    可以利用C语言访问硬件、操控内存中的位;C语言拥有丰富的运算符,能让程序员简洁地表达自己的意图;强大的标准库,这些函数用于处理程序员常需要解决的问题。

1.2.2 缺点

C语言的强大带来自由的同时也带来了责任。

  • 难以察觉的指针错误

    使用指针造成的错误难以察觉,需要时刻保持警惕

  • 丰富的运算符和紧凑的设计可以写出令人费解的代码

1.3 使用C语言的7个步骤

编程并不是一个线性过程,有时需要在不同的步骤之间往复。

开发者时常会忽略开头的两步,应该先规划再动手编写代码的好习惯,用纸和笔记录下程序的目标和设计框架,这样再编写代码的过程中会更加得心应手、条理清晰。

C是编译型语言,下面是理想的C语言编程步骤。

步骤描述备注
1、定义程序目标明确自己想做什么,思考程序需要哪些信息,要进行哪些计算和控制,以及程序报告的信息
2、设计程序考虑如何用程序完成任务,决定程序或辅助文件中如何表示数据以及处理数据的方式,用一般语言描述问题。
3、编写代码设计好程序后,需要把一般语言翻译成C语言,这个过程取决于编程环境。应该给自己的程序添加注释
4、编译使用编译器把源代码转换成可执行程序,转化时编译器会根据是否使用库链接一下标准库,也会报告一些警告或错误
5、运行程序根据计算机操作系统,运行程序
6、测试和调试程序程序可能会出现运行错误,应该检查程序是否按照设计的思路运行,程序中的错误叫做bug(行话),查找并修复程序错误的过程叫调试。随着程序员能力的提升,所写的程序错误也会越来越不易察觉
7、维护和修改程序创建完程序后,发现程序有错或想扩展程序的用途,就需要修改程序。如果编程时清楚地做了注释和采用了合理的设计方案,维护时会更加简单。

1.4 编程机制

注意!

生成程序的具体过程因计算机环境而异。C语言是可移植性语言,生成程序的过程不尽相同。

1.4.1 源代码文件

用C语言编写程序时,编写的内容被存储在文本文件中,该文件被称为源代码文件(source code file)。大部分C系统都要求文件以.c结尾,例如:budget.c,在文件名中,点号(.)前面的部分称为基本名(basename),点好后面的称为扩展名(extension)

同时,源代码文件的命名应该满足计算机系统的特殊要求,比如MS-DOS中要求名字长度不超过8个字符。

1.4.2 目标代码文件、可执行文件、库

C编程的基本策略是,用程序把源代码文件转换成可执行文件。

编译器把源代码转换成中间代码链接器把中间代码和其他代码合并,生成可执行文件

C编译器这种分而治之的方式方便对程序进行模块化,改变了某一个模块时不需要对其他模块进行重新编译。

中间文件有多种形式。一般而言,把源代码转换成机器语言代码,并把结果存放在目标代码文件(简称目标文件)中,此时目标文件只包含编译器翻译的源代码,还不是一个完整的程序。

目标代码文件缺失启动代码(startup code)启动代码是程序和操作系统之间的接口。

目标代码文件还缺少库函数,几乎所有C程序都要使用C标准库中的函数。

链接器的作用是把程序员编写的目标代码、系统的标准启动代码和库代码这3部分合并成一个文件,这个文件叫做可执行文件

1.4.3 实例图示

  • 源代码文件concrete.c
#include <stdio.h>
int main(void){
    printf("Concrete contains gravel and cement.\n");
    return 0;
}
  • 编译过程

compile_process.png