c语言入门,通俗易懂

本文以通俗易懂的方式介绍了C语言的起源、学习环境搭建、编写第一个程序和程序执行过程。C语言起源于UNIX操作系统,因其简洁的语法和强大的功能被广泛应用于系统编程。文章以开发环境dev-C++为例,指导初学者如何搭建环境并编写并运行第一个"hello world!"程序,同时也详细解释了程序的预处理、编译、链接和运行四个阶段。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

各位同学们好,小便会尽量用最用最通俗的话帮助你们学习这一门语言,由于我是第一次写博客,如果有哪里做得不够好可以提出,共同学习。
在这里插入图片描述
1.C语言的诞生

2.学习环境搭建

3.“hello world!”

4.程序的执行过程

1.C语言的诞生

话说在上世纪70年代,由贝尔实验室、麻省理工学院及美国通用电气公司所共同开发出一套安装在大型主机上多人多工的操作系统”multics“。在贝尔实验室中的有个叫 Ken Thompson 的人,他为multics操作系统写了一款叫做"space travel"的游戏.后来他发现这个游戏在这个系统上运行特别慢。为了能玩这个游戏他叫来了他的同事,也就是”C语言之父“–丹尼斯·里奇(Dennis Ritchie)。
在这里插入图片描述
决定共同开发一个极其简单的操作系统,于是两个好基友夜以继日地搞,在1969年的圣诞节搞出了计算机操作系统的先祖–UNIX操作系统,也就有了后来的Linux,macos,windows等操作系统。
UNIX的设计理念是 Keep it simple & stupid(大道至简),将一切简单化。

 Everything (including hardware) is a file
 Configuration data stored in text
 Small, single-purpose program
 Avoid captive user interfaces

 Ability to chain program together to perform complex tasks


- 所有的事物(甚至硬件本身)都是一个的文件。
- 以文本形式储存配置数据。
- 程序尽量朝向小而单一的目标设计
- 尽量避免令人困惑的用户接口
- 将几个程序连结起来,处理大而复杂的工作。

有使用过linux的同学可能深有体会,类UNIX操作系统没有像windows有着令人眼花缭乱的窗口和各种图片只有一个黑乎乎的命令行,其中各种硬件比如cpu,网卡,USB接口等等,都是以文件的形式存在,macos也是继承了UNIX的设计,你可以通过编辑配置文件来修改其操作系统的各种配置。

最初的UNIX操作系统是由B语言和汇编语言(一种能够直接操控cpu进行逻辑运算的原始语言)开发的,由于B语言和汇编语言一样过于依赖cpu,导致UNIX换到了其他的计算机上换了不一样的cpu指令集,UNIX就罢工了,于是里奇对B语言进行了更改也就有了C语言。
C语言和UNIX一样都有着大道至简的原则,语法简洁,结构清晰。
2011年10月12日,里奇于新泽西州伯克利·海茨镇的家中结束了他伟大的一生。在里奇去世之后,计算机历史学家保罗·茨露吉评价说:“里奇的名字并不容易让人察觉,也不为人熟知,但是……假如有一个能够把计算机放大的显微镜,你会看到里面到处都是他的贡献。"可以说在人类发展的几千年时间中一直发展缓慢,直到上世纪30年代半导体的出现到现代科技仅仅用了不到一百年的时间,人类登上月球,医疗技术突飞猛进,通过乘坐飞机可以快速的去到世界各地,通过巴掌大小的方块可以随时随地和异地的家人朋友聊天。这一切都离不开众多科研人员的贡献,在计算机发展方面也离不开里奇贡献。所谓一生二,二生三,三生万物,在我看来C语言就是这其中的”三“,我们熟悉的各种语言python,php,javascript,各种操作系统和编译器都是由C语言衍生而来。如果没有UNIX和C语言的出现,我们现在只能玩16进制。

克尼汉评价道:牛顿说他是站在巨人的肩膀上,如今,我们都站在里奇的肩膀上。

在计算机技术应用广泛的今天,这样一位传奇的人物值得我们铭记。

C语言的介绍

C是一种过程编程语言。它最初由Dennis Ritchie在1972年开发。它主要是作为编写操作系统的系统编程语言开发的。C语言的主要功能包括低级内存访问,一组简单的关键字和干净的样式,这些功能使C语言适用于操作系统或编译器开发等系统编程。
许多后来的语言直接或间接地从C语言中借用了语法/功能。像Java的语法一样,PHP,JavaScript和许多其他语言主要基于C语言。C++几乎是C语言的超集(很少有程序可以用C语言编译,但不能用C++编译)。

2.学习环境的搭建

小编用的是dev-C++ 主要是看中了其简洁的页面和方便快捷
在这里插入图片描述
下载链接https://sourceforge.net/projects/orwelldevcpp/files/latest/download
下载后进行安装即可

3.第一个程序

在dev中写入下面内容

#include <stdio.h>  ##库文件的包含
int main(){			##定义主函数,是整个程序中的不可或缺的部分
	printf("Hello world!");   ##利用printf函数输出
	return 0;			##返回控制权
}

看不懂解析的同学莫急,我后面会一一解释
注意"##“和其后面的中文不用写入程序,这些是注释给人看的
按下F11完成编译执行。接着会弹出一个黑色的窗口,上面会显示你在程序中输入的字段
在这里插入图片描述
如果你的程序无法执行,注意编写规范,比如在语句结束后面是否有”;“结尾,或者利用了中文格式的符号 ;,; (,( ),) ,,
可以看出中文格式的符号和英文格式的符号是有区别的。
一般错误在下方的格子中都会有其实,比如
在这里插入图片描述
通过翻译可以得知在main函数中的”;"格式有问题
下面我们来细讲程序在执行的过程电脑都干了些什么

4.程序的执行过程

程序的执行分为四个阶段
1.预处理
2.编译
3.链接
4.运行

1.预处理
每个C程序都必须以xxx.c的格式保存,因为对于C语言的编译器来说这个文件就是源代码。当我们按下F11时,首先执行第一步也就是预处理,其中带有#表示告诉预处理器需要做预处理的语句

#include 指令告诉预处理器在找到 #include 指令的位置将另一个文件的内容插入到源代码中。Include 指令通常用于包括 C 函数的 C 头文件,这些文件保存在当前源文件的外部

简单的来说就是#include <stdio.h>表示把一个叫做stdio.h的文件引入你的程序中。假如有一个工厂,里面有许多大型机器,机器上有很多按钮,工人需要通过阅读说明书去按按钮来操控机器运行。其中说明书就是这个叫做"stdio.h"的文件,按钮就是程序段中的printf,工人就是坐在电脑前的你,机器就是C语言的编译器,工人需要通过按按钮来操控机器进行工作达到预期的结果,换过来说就是你需要通过stdio.h中提供的"printf"这个按钮来将"Hello world!"输出在屏幕上,是的printf就是stdio.h中的一个方法,printf来于stdio.h这个文件,这个文件在我们下载dev-c++时会一起下载到电脑中,在dev-c++的下载文件夹下可以找到路径为 :C:\Program Files (x86)\Dev-Cpp\MinGW64\x86_64-w64-mingw32\include
现在小编尝试把它移出来,
在这里插入图片描述
小编现在把它放到了桌面上,然我们再次尝试执行一下程序
在这里插入图片描述
现在这个C语言的编译器已经不认识printf这颗按钮了
通过翻译下面格子的内容可以知道,此时这台机器以及不认识这颗按钮了,然后再将stdio.h放回,程序又可以接着执行。

stdio.h主要提供系统内存数据读写,和文件与文件夹,系统指令执行
库不止只有这一个,常用的库还有math.h从名字可以看出来该库主要提供数学算法
总之库就是为C语言编写提供按钮(方法)
接着我们回到#include <stdio.h>这句话,当你按下F11时首先会执行预处理,简单的来说就是把stdio.h文件中的程序加载到你编写的程序上,使你按的每一个按钮对于机器(C语言编译器)来说都有它的意义
2.编译,链接
C语言编译器会将检查源代码中的错误,如果没发现错误则会将源程序转换为xxx.obj文件,该文件由二进制组成,也就是10101格式的文件,此时cpu已经可以直接运行该程序了。唉,就很奇怪,不是还有链接吗?是的,未链接前的程序就是一个单独出来的按钮,你得把它安装到机器上啊,这就是链接的作用,将源程序和stdio.h库关联起来,从而达到让机器(程序)去完成某一个任务。这就是程序设计的概念所在,你需要通过按不同的按钮,像弹钢琴一样完成复杂的任务,当然库也不是凭空存在的,是某些大佬编写的程序,然后提供各种按钮让你操作
4.运行
这个很好理解,就不说了

最后我通过计算机底层来讲讲"return"这个按钮

话说cpu只能在一某刻时间内做一件事,不对啊,那计算机上的软件怎么可以同时运行呢?其实这些软件并没有同时进行,只不过是系统为这些程序平均分配了使用cpu的时间,所以看起来是同时执行的,其实是排着队一个一个来的,例如:任务A执行完后,把cpu的控制权交给任务B然后任务A进入等待,当任务B执行完后把cpu控制权交给任务C,任务B进入等待 大概就是 A->B->C->B->A 当任务A结束时会告诉cpu下一个任务也就是任务B在计算机内存中的位置,并将自己在计算机中的位置保持起来,任务B完成后重复以上过程,直到任务C完成后。由于任务C后面没有需要执行的任务于是,便将cpu控制权返回给任务B,如果任务B还有其他任务的话就会将cpu控制权转交给其他任务,比如任务DEFG,没有的话就会把控制权交还给任务A,而这个交回任务就需要用到指令return了(小编这里只是形象化了,cpu不认识return,只认识对应的汇编指令)
在编写C程序时也可以不加上return,C语言的编译器检测到错误后会自动帮你加上,为了编程规范还是加上好。

回归全局,当你按下F11后,源代码经过,预处理,编译,链接后会变成可执行文件加载入内存中进行等待,当系统给"main()"(也就是主函数)分配到cpu控制权时,程序得以执行,执行完成后归还cpu使用权给调用"main()"的其他程序

好累~,这不点个赞奖励一下小编。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值