# c-learning-notes **Repository Path**: ptlr/c-learning-notes ## Basic Information - **Project Name**: c-learning-notes - **Description**: C language learning notes. - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2023-11-19 - **Last Updated**: 2023-11-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README #

初识C语言

- 简单历史 - 优点和缺点 - 编写程序的步骤 - 编程机制 ## 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编译器这种分而治之的方式方便对程序进行模块化,改变了某一个模块时不需要对其他模块进行重新编译。 中间文件有多种形式。一般而言,把源代码转换成机器语言代码,并把结果存放在`目标代码文件(简称目标文件)`中,此时目标文件只包含编译器翻译的源代码,还不是一个完整的程序。 `目标代码文件`缺失`启动代码(startuo code)`。`启动代码`是程序和操作系统之间的接口。 `目标代码文件`还缺少`库函数`,几乎所有C程序都要使用C标准库中的函数。 `链接器`的作用是把程序员编写的目标代码、系统的标准启动代码和库代码这3部分合并成一个文件,这个文件叫做`可执行文件`。 ### 1.4.3 实例图示 - 源代码文件concrete.c ```c #include int main(void){ printf("Concrete contains gravel and cement.\n"); return 0; } ``` - 编译过程 ![编译过程](./img/compile_process.png)