lthw

笨办法学C 练习28:Makefile 进阶

练习28:Makefile 进阶原文:Exercise 28: Intermediate Makefiles译者:飞龙在下面的三个练习中你会创建一个项目的目录框架,用于构建之后的C程序。这个目录框架会在这本书中剩余的章节中使用,并且这个练习中我会涉及到Makefile便于你理解它。这个结构的目的是,在不凭借配置工具的情况下,使构建中等规模的程序变得容易。如果完成了它,你会学

笨办法学C 练习24:输入输出和文件

练习24:输入输出和文件原文:Exercise 24: Input, Output, Files译者:飞龙你已经学会了使用printf来打印变量,这非常不错,但是还需要学习更多。这个练习中你会用到fscanf和fgets在结构体重构建关于一个人的信息。在这个关于读取输入的简介之后,你会得到C语言IO函数的完整列表。其中一些你已经见过并且使用过了,所以这个练习也是一个记忆练习

笨办法学C 练习25:变参函数

练习25:变参函数原文:Exercise 25: Variable Argument Functions译者:飞龙在C语言中,你可以通过创建“变参函数”来创建你自己的printf或者scanf版本。这些函数使用stdarg.h头,它们可以让你为你的库创建更加便利的接口。它们对于创建特定类型的“构建”函数、格式化函数和任何用到可变参数的函数都非常实用。理解“变参函数”对于C语

笨办法学C 练习22:栈、作用域和全局

练习22:栈、作用域和全局原文:Exercise 22: The Stack, Scope, And Globals译者:飞龙许多人在开始编程时,对“作用域”这个概念都不是很清楚。起初它来源于系统栈的使用方式(在之前提到过一些),以及它用于临时变量储存的方式。这个练习中,我们会通过学习站数据结构如何工作来了解作用域,然后再来看看现代C语言处理作用域的方式。这个练习的真正目的

笨办法学C 练习20:Zed的强大的调试宏

练习20:Zed的强大的调试宏原文:Exercise 20: Zed's Awesome Debug Macros译者:飞龙在C中有一个永恒的问题,它伴随了你很长时间,然而在这个练习我打算使用一系列我开发的宏来解决它。到现在为止你都不知道它们的强大之处,所以你必须使用它们,总有一天你会来找我说,“Zed,这些调试宏真是太伟大了,我应该把我的第一个孩子的出生归功于你,因为你治

笨办法学C 练习21:高级数据类型和控制结构

练习21:高级数据类型和控制结构原文:Exercise 21: Advanced Data Types And Flow Control译者:飞龙这个练习是C语言中所有可用的数据类型和控制结构的摘要。它也可以作为一份参考在补完你的知识,并且不含有任何代码。我会通过创建教学卡片的方式,让你记住一些信息,所以你会在脑子里记住所有重要的概念。这个练习非常有用,你应该花至少一周的时

笨办法学C 练习26:编写第一个真正的程序

练习26:编写第一个真正的程序原文:Exercise 26: Write A First Real Program译者:飞龙这本书你已经完成一半了,所以你需要做一个期中检测。期中检测中你需要重新构建一个我特地为本书编写的软件,叫做devpkg。随后你需要以一些方式扩展它,并且通过编写一些单元测试来改进代码。注我在一些你需要完成的练习之前编写了这个练习。如果你现在尝试这个练习

笨办法学C 练习27:创造性和防御性编程

练习27:创造性和防御性编程原文:Exercise 27: Creative And Defensive Programming译者:飞龙你已经学到了大多数C语言的基础,并且准备好开始成为一个更严谨的程序员了。这里就是从初学者走向专家的地方,不仅仅对于C,更对于核心的计算机科学概念。我将会教给你一些核心的数据结构和算法,它们是每个程序员都要懂的,还有一些我在真实程序中所使用

笨办法学C 练习32:双向链表

练习32:双向链表原文:Exercise 32: Double Linked Lists译者:飞龙这本书的目的是教给你计算机实际上如何工作,这也包括多种数据结构和算法函数。计算机自己其实并没有太大用处。为了让它们做一些有用的事情,你需要构建数据,之后在这些结构上组织处理。其它编程语言带有实现所有这些结构的库,或者带有直接的语法来创建它们。C需要你手动实现所有数据结构,这使它

笨办法学C 练习34:动态数组

练习34:动态数组原文:Exercise 34: Dynamic Array译者:飞龙动态数组是自增长的数组,它与链表有很多相同的特性。它通常占据更少的空间,跑得更快,还有一些其它的优势属性。这个练习会涉及到它的一些缺点,比如从开头移除元素会很慢,并给出解决方案(只从末尾移除)。动态数组简单地实现为void 指针的数组,它是预分配内存的,并且指向数据。在链表中你创建了完整