C语言入门书籍推荐
05年上大一的时候开始学C语言,当时用的教材是谭浩强版的《C语言程序设计》,[狗头],这本书真是应试教育的典范,填鸭式的内容,夹杂着各种错误,本该重点描述的地方浅尝辄止,各种吐槽点……
工作这么多年,到目前为止读了不少C相关的书籍。在走了很多弯路以后,个人认为一个正确的C语言的学习的路径应该为,
- 在学习编程语言之前,建议先了解什么是计算机,可以观看《Crash Course Computer Science》;
- 安装一个linux系统,现在已经越来越方便了,比如,可以在win11上安装wsl2和ubuntu,学习一些linux的基础命令;
- 了解操作系统的基本原理,什么是进程、线程,编译、链接的基本原理,应用程序是如何运行的;
- 学习gcc,gdb的基本使用命令(初期最好不要使用集成开发环境,例如visual studio,clion等强大的IDE去编写程序,建议直接命令行),结合预编译、编译、汇编、链接等指令去更深入的了解程序运行的原理,利用gdb去调试代码;
- 学习一门基础语言,如果是第一门编程语言,那肯定是C,它应用广泛,操作系统(系统编程)、驱动、编译器开发、网络编程(socket)、音视频、游戏、GUI(部分组件)、嵌入式等等都是它的擅长领域,在编程语言中一直排名前3。它足够经典及精炼,执行效率高,占用内存少,可以“直接”和计算机硬件打交道,能更深一步的了解计算机的软硬件运行原理;
- 学习cmake的基础语法及命令,因为目前大部分的开源C/C++代码都支持cmake编译;
- 在掌握了一门基础语言后,学习对应的数据结构、算法、设计模式等。在这个阶段多去读一些开源的优秀源码,从小项目到大项目,学以致用,去学习优秀的大牛们是如何设计软件,如何利用简单的c语言去编写出优雅的代码;
- 最后,在自己感兴趣的特定领域,例如网络编程,去学习一些已有的广泛使用的第三方库的使用。然后,去写一些现实中实际可以用的程序;
下面是我认为比较好的一些C语言书籍的推荐:
该书由计算机科学家Brian Kernighan和C语言之父Dennis Ritchie合著,是第一部介绍C语言编程方法的书籍。它因作者名字的缩写被简称为K&R;或是因封面颜色,也被称为白皮书。在C语言的发展和普及过程中起到了非常重要的作用,被视为是C语言的业界标准规范,而且至今仍然广泛使用。它被公认为计算机技术著作的典范,以清晰简洁的文字讲述而著称。书中用\”hello world\”为实例开始讲解程序设计,成为程序设计语言图书的传统。
相比于K&R,这本书更贴近于实际的应用,也更“现代”,适合进阶使用,所讲述的知识点都是干货,几乎没有废话。本书主要目的就是通过一种“现代方法”来介绍C语言,书中强调标准C,强调软件工程。第2版修订版中不仅有C99中的新特性,还与时俱进地增加了C11和C18中的内容。本书分为C语言的基础特性、C语言的高级特性、C语言标准库和参考资料4个部分。每章末尾的“问与答”部分给出一系列与该章内容相关的问题及答案,带着读者去思考,作者的水平真的是很高。
当你有一定的编程基础后,建议开始读《深入理解计算机系统》这本书,多读几遍,这本书“很硬”,每次读完的感受应该都不同。本书从程序员的视角详细阐述计算机系统的本质概念,并展示这些概念如何实实在在地影响应用程序的正确性、性能和实用性。全书共12章,主要内容包括信息的表示和处理、程序的机器级表示、处理器体系结构、优化程序性能、存储器层次结构、链接、异常控制流、虚拟存储器、系统级I/O、网络编程、并发编程等。书中提供大量的例子和练习,并给出部分答案,有助于读者加深对正文所述概念和知识的理解。
本书的最大优点是为程序员描述计算机系统的实现细节,帮助其在大脑中构造一个层次型的计算机系统,从最底层的数据在内存中的表示到流水线指令的构成,到虚拟存储器,到编译系统,到动态加载库,到最后的用户态应用。通过掌握程序是如何映射到系统上,以及程序是如何执行的,读者能够更好地理解程序的行为为什么是这样的,以及效率低下是如何造成的。
如下是kitware官网的介绍,cmake现在确实已经成为了c/c++软件系统的常用构建工具,
CMake: A Powerful Software Build System CMake is the de-facto standard for building C++ code, with over 2 million downloads a month. It’s a powerful, comprehensive solution for managing the software build process. Get everything you need to successfully leverage CMake by visiting our resources section.
cmake经过多年的发展,已经变得非常复杂。如果光读官网的文档,应该很少有人能读的下去。目前关于cmake的书籍很少,下面这本书是新出的,对cmake的方方面面都做了介绍,非常适合cmake的新人,如果你想深入了解cmake的构建系统,建议阅读本书,github有本书的翻译版本,地址为https://github.com/xiaoweiChen/Modern-CMake-for-Cpp,但是还是建议大家读英文原版。
当掌握了C语言本身后,如果你是从事linux/unix相关领域软件的开发,我建议你一定要读下面的两本书(应该是3本,因为第一本是上下两册),虽然都很厚,但是如果认真读完,融会贯通,收获会非常大。建议先读第一本《Linux/UNIX系统编程手册》,如果有精力可以再精读《UNIX环境高级编程》,两本书可以互补。
本书是介绍linux与unix编程接口的权威著作,主要讲解了高效读写文件,对信号、时钟和定时器的运用,创建进程、执行程序,编写安全的应用程序,运用posix线程技术编写多线程程序,创建和使用共享库,运用管道、消息队列、共享内存和信号量技术来进行进程间通信,以及运用套接字api编写网络应用等内容。 在汇聚大批 linux专有特性(epoll、inotify、/proc)的同时,还特意强化了对unix标准(posix、sus)的论述,彻底达到了“鱼与熊掌,二者得兼”的效果,这也堪称本书的最大亮点。
很多人都知道APUE这本书,在本书第1版出版后的十几年中,UNIX行业已经有了巨大的变化,特别是影响UNIX编程接口的有关标准变化很大。本书在保持了前一版风格的基础上,根据最新的标准对内容进行了修订和增补,反映了最新的技术发展。书中除了介绍UNIX文件和目录、标准I/O库、系统数据文件和信息、进程环境、进程控制、进程关系、信号、线程、线程控制、守护进程、各种I/O、进程间通信、网络IPC、伪终端等方面的内容,还在此基础上介绍了多个应用示例,包括如何创建数据库函数库以及如何与网络打印机通信等。
如果是从事网络编程的相关领域,建议先读《TCP/IP详解 卷1:协议》,
本书是一本完整而详细的TCP/IP协议指南。描述了属于每一层的各个协议以及它们如何在不同操作系统中运行。作者W.Richard Stevens是大牛,书中对各层协议进行了详解,同时结合tcpdump的抓包结果对协议进行了深入的分析。
本书主要结合TCP/IP协议介绍unix socket 相关api,本书第1、2版由Richard Stevens编写,第3版,由世界著名网络专家Bill Fenner和Andrew M. Rudoff执笔,根据近几年网络技术的发展,对上一版进行全面修订,增添了IPv6的更新过的信息、SCTP协议和密钥管理套接口的内容,删除了X/Open传输接口的内容。
哪款C语言编译器(IDE)适合初学者?
这里我们把“编译器”和“IDE(集成开发环境)”当做一个概念,不再加以区分。
C语言的集成开发环境有很多种,尤其是 Windows 下,多如牛毛,初学者往往不知道该如何选择,本节我们就针对 Windows、Linux 和 Mac OS 三大平台进行讲解。
Windows 下的 IDE 多如牛毛,常见的有以下几种。
Windows 下首先推荐大家使用微软开发的 Visual Studio(简称 VS),它是 Windows 下的标准 IDE,实际开发中大家也都在使用。
为了适应最新的 Windows 操作系统,微软每隔一段时间(一般是一两年)就会对 VS 进行升级。VS 的不同版本以发布年份命名,例如 VS2010 是微软于 2010 年发布的,VS2017 是微软于 2017 年发布的。
不过 VS 有点庞大,安装包有 2~3G,下载不方便,而且会安装很多暂时用不到的工具,安装时间在半个小时左右。
对于初学者,我推荐使用 VS2015。最好不用使用 VS2017,有点坑初学者。
如果你讨厌 VS 的复杂性,那么可以使用 Dev C++。Dev C++ 是一款免费开源的 C/C++ IDE,内嵌GCC编译器(Linux GCC 编译器的 Windows 移植版),是 NOI、NOIP 等比赛的指定工具。Dev C++ 的优点是体积小(只有几十兆)、安装卸载方便、学习成本低,缺点是调试功能弱。
NOI 是National Olympiad in Informatics的缩写,译为“全国青少年信息学奥林匹克竞赛”;NOIP 是National Olympiad in informatics in Provinces的缩写,译为“全国青少年信息学奥林匹克联赛”。NOI、NOIP 都是奥林匹克竞赛的一种,参加者多为高中生,获奖者将被保送到名牌大学或者得到高考加分资格。
Visual C++ 6.0(简称VC 6.0)是微软开发的一款经典的 IDE,很多高校都以 VC 6.0 为教学工具来讲解C和C++。但VC 6.0是1998年的产品,很古老了,在 Win7、Win8、Win10 下会有各种各样的兼容性问题,甚至根本不能运行,所以不推荐使用。
VC 6.0 早就该扔进垃圾桶了,可是依然有很多大学把它作为教学工具,并且选用的教材也以 VC 6.0 为基础来讲解C语言和 C++,可见教学体制的极端落后,课程体系的更新远远跟不上技术的进步。
Code::Blocks 是一款开源、跨平台、免费的 C/C++ IDE,它和 Dev C++ 非常类似,小巧灵活,易于安装和卸载,不过它的界面要比 Dev C++ 复杂一些,不如 Dev C++ 来得清爽。
Turbo C 是一款古老的、DOS 年代的C语言开发工具,程序员只能使用键盘来操作 Turbo C,不能使用鼠标,所以非常不方便。但是 Turbo C 集成了一套图形库,可以在控制台程序中画图,看起来非常炫酷,所以至今仍然有人在使用。
C-Free 是一款国产的 Windows 下的C/C++ IDE,最新版本是 5.0,整个软件才 14M,非常轻巧,安装也简单,界面也比 Dev C++ 漂亮。C-Free 的缺点也是调试功能弱。可惜的是,C-Free 已经多年不更新了,组件都老了,只能在 XP、Win7 下运行,在 Win8、Win10 下可能会存在兼容性问题。
点击即可观看
本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com
文章为作者独立观点不代本网立场,未经允许不得转载。