《C 语言入门教程》发布了

作者: 阮一峰

日期: 2021年9月 7日

向大家报告,我写了一本《C 语言入门教程》,已经上线了,欢迎访问。

我知道,这件事有点奇怪,让我来解释一下。

最近两三年,我想做一些服务器开发,一直在学习这方面的技术。去年发布的《Bash 脚本教程》,就是在学习 Shell 的时候写的。后来学习后端编程语言,深感好多基础的东西需要补课,就回过头重新开始看 C 语言。

我上一次学习 C 语言,还是在学校里。印象中,C 语言不容易,复杂类型很难声明和解读。但是,这一次重新学习,意外觉得 C 语言并不复杂,语法点少,没有类,只能使用命令式编程(imperative programming),跟脚本语言(比如 JavaScript)相比,语法描述要容易很多。加上网上很少 C 语言中文教程,质量也不理想,于是就萌生了自己写教程的念头。

最初的想法是,在我的学习笔记基础上,加一些示例就可以了。但是真的动手以后,发现工作量很大,尤其是后来决定 C 语言标准库也包括在教程中。C 的语法点虽然不多,但完整的教程至少要20几章,而且 C 代码写法太自由,不少疑难之处还要去查看参考书籍。所以写得很慢,从春节后到现在,整整写了六个多月,终于写完了。

与以往一样,这个教程是开源的,采用知识共享许可证,源码托管在 GitHub ,大家可以自由使用。点击下面网址,在线阅读全书。

wangdoc.com/clang

我对它还算满意,该讲的地方都讲到了,给出了许多示例,初学者完全够用了。但是,毕竟我平时很少有机会使用 C 语言编程,各种错误和遗漏之处,肯定有不少,欢迎大家到仓库提交补丁,或者发 issue 反映问题。

(完)

留言(48条)

刚好最近也想重新复习一下,谢谢分享,已经在微信打赏了

佩服!!!

教程类文档只服阮大神,简单明了!

先赞了再说????

虽然不怎么用了,但有这个教程可以查询也很好,谢谢阮老师。

强力推荐研究一下 erlang, common lisp 这样的程序设计语言

佩服阮老师的学习精神!真学无止境!
另外疑问留言为嘛要留电子邮件

太赞了,正想系统研究一下C,突然就更了,阮老师高产!!!

看来是时候再出一本汇编教程了,然后是单片机教程

啥时候出个 JavaScript教程呀

感谢阮老师。

好耶!什么时候出个C++教程呀~

感谢阮老师。
教程很好,内容简明易懂,关键是比学校教的多出了许多实用内容(尤其是多文件项目部分)。
不管是0基础,还是已经在学校学过c的同学,都很适合看看。

引用pope的发言:

啥时候出个 JavaScript教程呀

已经有了啊 在 这个教程同一个网站

引用pope的发言:

啥时候出个 JavaScript教程呀

有了啊

Python的可以来一个,现在比较火的

引用刘女士的发言:

佩服阮老师的学习精神!真学无止境!
另外疑问留言为嘛要留电子邮件

因为邮件现在都实名了,大家不要乱说话,没啥大不了的吧

阮老师的文章每一篇都会准时看,太感谢阮老师无私的分享各种高质量的文章和教程

从程序员入门开始,一直看阮老师的文档,如果没有您的技术文档作伴,这条路上多出来的阻力不知要多多少。今天看到这篇文章,我已经在想象自己可以轻松入门c的场景了。千言万语,汇成一句话:谢谢

https://akaedu.github.io/book/

这个教程也挺不错的,可以参考一下

当年学c语言和数据结构的时候,是看郝斌的教程,差不多是20年以前的事情了
对于初学者还是建议看郝斌的c语言教程当然阮老师的也非常不错

目前个人认为,对于新人入门的话,选择python或者javascript是不错的,学c的话,大学老师已经在大一教过了

目前大多数人的学习环境是windows,甚至国家考试也是windows环境,这个如何治

能否把您写的几个教程都列出来,不是今天读到这边文章,还不知道有这么好的东西。

有时觉得阮老师现在每周文章都内嵌各种广告保险 让人反感。但又看到在不断写各种教材 又让人可敬。矛盾~~

阮老师的作品总是言简意赅,通俗易懂,读起来简直是享受,js标准教程和es6教程让我受益匪浅

引用展翼骐骥的发言:

能否把您写的几个教程都列出来,不是今天读到这边文章,还不知道有这么好的东西。

阮老师的文章是有分类的,你可以看看《开发者手册》这个分类
https://www.ruanyifeng.com/blog/developer/

已 Star,赞

给咱留个打赏通道

真心佩服,阮老师,真是前端布道大师

教师节快乐!真正的传道授业解惑,加油!

很高兴阮老师开始涉足C语言了,学完语言,估计接下来就要开始学习Linux下的构建了,期待阮老师发布Makefile/CMake的技术教程。

引用吴昊昊的发言:

目前大多数人的学习环境是windows,甚至国家考试也是windows环境,这个如何治

windows 和 c 有啥不兼容的呢?

想请问下阮老师,github上的电子书是用什么工具写的?感谢

从开发的角度来说,文档写的真心很棒

引用haha的发言:

有时觉得阮老师现在每周文章都内嵌各种广告保险 让人反感。但又看到在不断写各种教材 又让人可敬。矛盾~~

我还在上学的时候,也对广告这件事异常反感。直到我进入社会,我才知道广告是必要的,它可以促进 win-win-win 三赢局面:受众拥有可以白嫖的资源、广告投放商的信息被扩散、创作者获得激励和回报。

现在很多成功的创业案例都是这个模式,促成这个模式对所有人都是有益的,可以持续发展。

可以来个cocos creator的吗拜托啦

感谢阮老师,今年正想考研试试,这几天在啃谭浩强的c语言

谢谢大佬 刚准备学c语言

真好,最开始看的是js教程

C语言即没有看起来那样难,也没有看起来那样容易。例如宏这个概念,说白了就是文本的替换,用过WORD,写字本等工具的人都很快理解宏的概念。但是宏的更多知识,Self-Referential,PreScan,Stringification等不是一时半刻能理解透的,我也是经常翻翻这些知识点,因为有时遇到技术问题不知怎么解决。

读了一遍,发现很多以前不理解只是记下来用的知识背后都是有原因的。谢谢阮老师!

阮老师出品,必属精品

有java教程就好了。

当年大学,把谭浩强的c语言程序设换成您这本~ 也不至于让我成为一个node程序员

引用xugaoxiang的发言:

想请问下阮老师,github上的电子书是用什么工具写的?感谢

gitbook

感谢大佬

现在不应该用Rust替代掉C吗,希望出Rust的教程

大佬牛逼 好多东西都是看大佬的东西学的

有些例子存在错误吧
https://wangdoc.com/clang/struct.html
struct 结构一章中 5.位字段的例子

typedef struct {
unsigned int ab:1;
unsigned int cd:1;
unsigned int ef:1;
unsigned int gh:1;
} synth;

synth.ab = 0;
synth.cd = 1;

这里的 typedef struct { ... } synth; 创建了一个匿名数据结构的别名 synth,并不是一个 匿名数据结构变量 synth,后面对 synth.ab、synth.cd 赋值会报错。

我要发表看法

«-必填

«-必填,不公开

«-我信任你,不会填写广告链接