2.C语言开发流程

以前学的,现在拾起来了,参考了《C Primer Plus》这本书的内容和我以前看的网课内容结合起来进行总结的,有不对的地方,欢迎批评指正!

1.什么是C语言

C语言是一种计算机编程语言,常用于开发操作系统、硬件控制和高效的应用程序。它简洁(语法简单直接不像其他高级语言那样很多复杂的抽象)、高效(能够直接操作内存)且灵活(支持函数、指针、结构体等,可以实现复杂的功能),允许程序员直接控制计算机的内存和硬件。通过使用函数、指针和多种运算符可以实现复杂的计算和操作。

2.C语言开发流程

第一步:定义程序的目标

在写程序之前,要有一个清晰的思路,想要程序去做什么动作,首先需要自己明确自己想做什么,思考你的程序需要哪些信息,要进行哪些计算和控制,以及程序需要报告什么信息。目标设定不只是包括程序的功能,还应该考虑程序的性能要求、用户需求、平台限制等。

第二步:设计程序

对程序应该完成什么任务了解了之后,就要去考虑如何使用程序来完成它,例如,用户界面应该是怎样的,应该输入或输出什么信息,怎么组织程序等。除了考虑程序功能、输入输出等,还可以进一步思考程序结构。包括模块化设计、函数划分、数据结构选择等。

第三步:编写代码

设计好程序之后,就可以编写代码来实现了,也就是说将设计好的程序翻译成C语言,可以先把思路卸载纸上,然后使用代码输入到计算机中。比如说有个需求是用户输入一个数然后计算机能够输出刚才用户输入的值,怎么做呢?首先定义程序的目标,目标就是将用户输入的值输出,然后设计程序,就是先获取到用户输入的值,然后将这个值输出,然后是编写代码,将设计好的程序翻译成C语言,C语言中有个scanf是用于让用户输入的函数,还有一个printf是C语言中输出值的函数,所以编写的代码就像下面这样,注意:这个不会的没事,先了解一下这些步骤即可,后面会学到的。

第四步:编译

在这个步骤中编译器会把源代码转换成可执行的程序,可执行代码使用计算机的机器语言表示的代码(0和1组成的),C编译器负责把C代码发已成特定的机器语言来执行程序。在这个阶段,编译器会检查代码中的语法错误、语义错误以及一些明显的逻辑问题。如:

语法错误:例如拼写错误、缺少分号、括号不匹配等。

类型错误:例如将整数赋值给字符串变量,或调用不存在的函数和方法。

作用域问题:例如变量在使用前未声明,或访问了不可见的变量。

第五步:运行程序

运行阶段是指程序在编译成功后执行的过程。在此过程中可能会发生错误,如:

逻辑错误:例如错误的算法实现、错误的条件判断等。

资源问题:例如内存泄漏、文件未找到、网络连接失败等。

运行时异常:例如数组越界、空指针引用等。

第六步:测试和调试程序

在前面几个步骤中,可能会发生错误,这个步骤应该检查程序是否按照你所设计的思路运行,如果有错误,通过进行查找并修复程序错误的过程叫做调试。

第七步:维护和修改代码

创建完程序之后,你发现程序有错,或者想要扩展程序的用途,这个时候就需要修改程序了。

3.C语言的优势

高效性:C语言编写的程序能够直接访问计算机的内存和硬件资源,因此执行效率非常高,非常适合要求高性能的系统,如操作系统,嵌入式系统,游戏引擎等。

可移植性:在一种系统中编写的C语言程序稍作修改或者不修改就能在其它系统中运行,如果要修改的话,也只需简单的更改主程序头文件中的少许项即可。

灵活性:提供了丰富的数据类型和操作,允许程序员以多种方式组织数据和控制程序流程。支持指针操作,使得程序员能够直接操作内存地址,这在某些高级功能(如动态内存分配、数据结构实现等)中非常有用。

4.编程机制

当运行C程序的时候,从一个C源文件到生成一个可执行程序,一共经历了四个步骤,我感觉这个还是挺重要的,能够更好的理解程序的执行逻辑,里面有一些专有名词不解释了,可以自己主动去动手搜索更好的理解:

预处理:将源文件展开头文件(如#include、#define等),替换宏(变量宏,函数宏),替换空行、空格、tab,预处理阶段结束后,会生成一个经过处理的源代码文件(通常以.i为扩展名)。

编译:编译器逐行检查程序中出现的语法和词法错误!校验简单的逻辑错误。---所有编译过程中最耗时的。编译阶段结束后,会生成一个包含汇编指令的汇编代码文件(通常以.s为扩展名)。

汇编:使用汇编器将.s汇编文件中的所有汇编指令,翻译成二进制机器码。汇编器还会为程序中的变量和函数分配内存地址。汇编阶段结束后,会生成一个包含机器代码的目标文件(通常以.o为扩展名)。

链接:链接器会将多个目标文件及所需的库文件合并为一个可执行文件。在链接过程中,链接器会解析目标文件中的符号引用,并将它们链接到正确的地址。如果链接器无法找到某个符号的定义,它会生成一个链接错误。链接阶段结束后,会生成一个完整的可执行文件。

举个例子来理解一下吧:

首先我现在写了一个程序如下:

#include

#include

int main(void){

// comments

int num;

printf("please input a num:");

scanf("%d",&num);

printf("output the input num:%d\n",num);

return 0;

}

首先通过预处理器来将头文件展开,替换空行空格等,文件以.i结尾

然后通过编译生成汇编文件(以.s结尾)

然后使用汇编器将.s汇编文件中的所有汇编指令,翻译成二进制机器码。(以.o结尾)

最后通过链接器会将多个目标文件及所需的库文件合并为一个可执行文件就可以运行了。

运行一下看看效果

2025-12-22 09:18:41