[求助]最近在想学 C 语言,大家有没有好的意见,或者学习资料之类的?

2019-11-21 11:45:19 +08:00
 nnnToTnnn

各位 V 友,是这样的,因为 C 语言编译后部署后字节很小,并且对 Linux 或者 Window,android 等等系统十分和善,所以我想系统的学习一下 C 语言。但是似乎找不到一些很好的学习资料。在此问问大家有好的学习资料吗?

想学一些比较底层的,例如 lwip 或者 tun/tap。还有网络协议

4116 次点击
所在节点    程序员
28 条回复
capping
2019-11-21 12:42:11 +08:00
先看《 c 程序设计语言》,然后再看《数据结构与算法分析-c 语言描述》,再然后看《 Redis 设计与实现》,然后的然后...
cigarzh
2019-11-21 13:50:29 +08:00
难道不是先学语法吗…
dreamerlv3ex
2019-11-21 13:53:48 +08:00
网络看看 nginx redis
TabGre
2019-11-21 14:06:46 +08:00
也想巩固一下,看的书籍是 C Primer Plus
taogen
2019-11-21 14:29:57 +08:00
1. The C Programming Language (2nd, 1988) by Brian W. Kernighan, Denis M. Ritchie
2. Pointers on C (1997) by Kenneth A·Reek
3. Expert C Programming: Deep C Secrets (1994) by Peter van der Linden
4. C Traps and Pitfalls (1989) by Andrew Koenig
Hanggi
2019-11-21 14:38:20 +08:00
感觉你这么想是不对的。

首先你这么问了,就说明你对操作系统了解还不是很深。不是说你会了 C 语言就能做什么,而是你要了解 C 语言在操作系统中怎么运用的。如果真的感兴趣,先去看操作系统相关的书。语言只是工具。

如果只是想做个应用程序,Go 语言、Java 什么的都都有很多不错的工具。
Hanggi
2019-11-21 14:41:12 +08:00
换一种说法就是,
如果把 C 语言作为应用程序开发工具,它通常不是最好的选择。
但是如果系统学习 Linux 操作系统,自然就会对 C 语言有更深的理解。
nnnToTnnn
2019-11-21 14:53:18 +08:00
@Hanggi 是这样的在 linux 或 window 等其他平台中对于系统 lib 库的调用非常友好,但是 Java 来说大量依赖三库进行包装,特别是 Java,例如在 Java 中调用 Window API 需要采用 JNI 或者三分产品进行封装 Window API 提供 Java 接口。

但是相对于 C 而言就简单很多。

Go 虽然达到了 C 的效果,并且支持交叉编译,非常友好。所以我一直在 C 和 Go 中犹豫,但是 Go 似乎没有比较友好的集成开发环境。而且体积想对于 C 而言稍微大一点。


当然应用程序 Java Go 都可以做,甚至 html 也可以做 UI,但是无论哪种打包的体积都很大,就算压缩了大小都超过了 30mb 了,其实我只是想用 C 做一些小工具。并且熟悉一下 C 语言。
cmdOptionKana
2019-11-21 15:03:57 +08:00
不太理解,为什么要那么介意体积?

体积小点,好处并不大啊
nnnToTnnn
2019-11-21 15:08:29 +08:00
@cmdOptionKana e....mmm 如果一个程序,能做到比之前更小,运行效果更好,这何尝不是一件好事情。最求最佳,我是这么理想的 =。=
cmdOptionKana
2019-11-21 15:09:28 +08:00
不过如果对编辑本身有着不折不挠的兴趣,从 C 入门是个非常好的选择。
liang96
2019-11-21 15:10:41 +08:00
@nnnToTnnn 打算重新开发什么软件呢?
dosmlp
2019-11-21 15:12:38 +08:00
C 语言不是很简单么
nnnToTnnn
2019-11-21 15:13:54 +08:00
@liang96 没有打算重新开发软件,而是想学习,如果是想开发软件的话,估计仅仅只是想开发一个可以审计流量的 vpn =。= 当然技术有限,还在学习 lwip 中
cmdOptionKana
2019-11-21 15:18:28 +08:00
@nnnToTnnn 语言的 “好” 有很多维度,“占用内存小、运行效率高”是一种,但是相对来说,“代码量少、不容易出错、容易维护”是被更广泛认同的更好的优点。

一般来说,C 语言比较适合用来学习,但当你真的想做个有实用性、后续容易维护、健壮的程序,会发现 C 语言用起来太累了。
xsen
2019-11-21 15:21:09 +08:00
若是对 IoT 类感兴趣,可以直接基于 freertos,研读其源码与进行测试。因为如上所说对 lwip 感兴趣,那么就非常适合,freertos 网络部分就是集成了 lwip。进一步,还可以对 ble、wifi、lora 这些做进一步深入,包括协议类如 mqtt 这些

若是要考虑跨平台+网络类应用,go 是最理想的选择。开发效率高,易学,是非常理想的跨平台开发方案。利用 golang 的 qt binding 也可以做 UI
nnnToTnnn
2019-11-21 15:26:15 +08:00
@xsen 跨平台的开发方案,我这边对 javafx 和 java 比较熟悉,主要是对 IoT 比较有兴趣。其实主要还是对 lwip 比较感兴趣。谢谢啦,我去研究下 freertos
ahojcn
2019-11-21 16:44:46 +08:00
b 站搜 翁恺 老师的 C/C++ 课程看看。
sosilver
2019-11-21 17:09:13 +08:00
Modern C,今年出版的,对标 C17
beyondex
2019-11-21 17:10:31 +08:00
目前用的什么语言?如果是 Java 你就搜 Java 和 c 的差别,然后你理解差异的部分就可以了,这是最快的。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/621685

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX