我有一些C语言的基础知识(稍微了解一些C++),我得到了K&R的一份副本,并希望利用它来更深入地了解该语言。有哪些好的想法可以涉及大部分C语言特性和标准库?另外,我应该注意C89和C99之间的重要区别是什么?
编辑:忘记提到了,这对于初学者来说应该是可以做到的。我不是在寻求编程教程;相反,我想要中等规模的东西。我知道操作系统是C的主要目的之一,但那会不会太复杂了?
另外,阅读并回答问题总是一个好主意,但我想要实践一下,写一个能够做一些事情的程序。
实现一种编程语言。这并不需要非常困难 - 我曾经做过那个不可名状的语言 - 但它将迫使你学习C语言的许多重要部分。如果您不想自己编写词法分析器和/或解析器,可以使用lex/flex和yacc/bison,但如果您计划这样做,您可能希望从一个稍微小一点的项目开始。
选取一些在高级语言中使用的程序,并进行重写。如果您有一个Perl/Python/Ruby/Bash脚本经常使用,同时注意到其运行时存在滞后,可以着重于性能,使用C语言进行重写。
然而,我认为,如果您正在编写一个用于学习C语言的程序,最好重新发明轮子。在C语言中编程就是制造和调整轮子,如果您只通过使用抽象化轮子的库来学习C语言,那么您实际上不是在学习C语言。这可能会更快 - 当您在C语言上开发真正的项目时,请不要重新发明轮子 - 但如果您这样做是为了学习,那么请务必学习轮子的工作原理。
在 StackOverflow 上阅读并回答 C 语言问题是学习该语言细节的好方法。
我推荐通过这些网站进行学习:http://projecteuler.net/。当然,有时候用C语言低效的方法去解答问题可以帮助我们感受暴力算法所需的时间。然后再尝试想出更聪明的方法,真正体会C语言的美妙之处!
一个简单语法语言的解释器。当然,不应使用词法/语法分析器生成器来使其更有趣。
构建一个国际象棋游戏。这可以非常琐碎,因为您甚至可以使用简单的控制台进行操作。这将让您实现一些逻辑、使用数据结构、处理指针等。存储分数以便您能够处理持久性。
硬件(嵌入式微处理器系统)和操作系统内核代码?
请注意,这是一个问题而不是需要翻译的内容。如果您有其他需要翻译的内容,请告诉我。在这种情况下,我最喜欢使用的程序是正则表达式匹配程序。它使用相当基本的语法,但使用了语言的许多低级特性(鉴于C是一种相当低级的语言,这些特性大部分都包括在内)。