C语言之路
来源:互联网 发布:淘宝售后要做些什么 编辑:程序博客网 时间:2024/05/21 17:51
http://blog.jobbole.com/15384/
糟糕的C读物(不要忽略这一段)
我将以一些我认为不必太认真的读物说起:网络教程,博客以及大部分Google上得到的东西都算(没错,也包括我这篇)。通常我认为这些资料来源是不可信的,而且有潜在的危害。和这一行里大部分人一样,我曾是重度Google搜索使用者。过了一段时间之后,我发现不准确的答案反而对生产力的提高有反效果。这让我有了一种速度上的错觉:答案找的越快,活干的越慢。没有什么网站会比一本好书更有价值,没有什么好书比反汇编输出更有价值。
优秀的C读物
1.《C程序设计语言》
《C程序设计语言》,又称 K&R C。这是你应该首先去看的有关C语言编程的经典著作。读这本书会很轻松,它只有272页,386幅插图。由C语言之父Kernighan和Ritchie亲自编写的短小且有清晰解释的代码示例遍布全书各个角落。在刚开始的几周里,所有你需要了解的有关C语言的知识都在这里。这本书读起来很有趣,主题都比较短小,而且可以使你很快上手。你可能会跳过附录A(有关C语言中比较晦涩的阴暗角落,比如类型提升、 类型转换、型别退化以及其它一些无用的东西)以及有关C标准库的附录B。我认为刚开始学习C语言时,这些就足够了。这本书使C显得很娇小、简洁,因此强烈推荐学习这本书。
如果你继续学习并坚持练习,很快你就会触到一些诡异的情况,比如下面的例子:
unsigned
int
ui_one = 1;
signed
int
i_one = 1;
signed
short
s_minus_one = -1;
if
(s_minus_one > ui_one)
printf
(“-1 > 1 \n”);
if
(s_minus_one < i_one)
printf
(“-1 < 1 \n”);
#./run
#
# -1 > 1
# -1 < 1
在上面的代码示例中,由于整型提升的缘故,-1先被计算为大于1,然后又小于1。C语言里有很多这种阴暗面,此时将产生不正确的结果。
这里还有许多细节之处:
extern
void
foo(
void
);
void
(*f)();
f = &foo;
// 合法
f = foo;
// 同样合法!(语法糖)
f();
// 调用f
(*f)();
// 同样调用了f(语法糖)
或者有关数组/指针/类型退化的例子:
int
array[] = {0, 1, 2, 3, 4};
int
*pointer = array;
if
(
sizeof
array ==
sizeof
pointer)
printf
(“This will never be printed!!”);
if
(
sizeof
(
int
*) ==
sizeof
&array[0])
printf
(“This will be printed!!\n”);
if
(&array[2] - &array[0] == 8 )
printf
(“This will never be printed either, result is 2 not 8!!”);
当你发现自己原来对C语言的了解还很不够时(附录A真的太轻量级了),那这时就是拿起第二本书的时候了。
2. 《C专家编程》
这是本神奇的书,因为该书以一种非常娱乐化的方式告诉你在代码背后究竟都发生了些什么。通过介绍了几个著名bug的奇闻异事(大部分跟NASA有关)后,读者将再次领略整型提升、下标、类型退化以及许多其他的C语言犄角。这本书是如此的迷人,你很可能会一晚上埋头读完353页,然后失望地说:怎么这么短?
现在你想挖的更深些并成为一个优秀的C程序员,你应该拿起这本你所需要的最后一本C语言书籍:
3. 《C语言参考手册》
这本书全面涵盖C/C89/C99标准。从今以后你面对的就是这些冰冷无聊的语言标准。你可以把K&R 和C专家编程放在书架上,而把这本C语言参考手册摆放在显示器旁,任何你想知道的C语言知识都在这里。
附加阅读
1. id Software 代码库
只看书当然是不够的。阅读优秀的开源代码将带来极大的帮助。我的最爱是id Software的3D引擎代码库:Doom、Quake、Quake2、Quake3、Wolfenstein 3D iPhone以及Doom iPhone。当我阅读这些代码时,我会自己撰写备忘日志。之后我会整理这些日志,写成技术文章(Doom、Quake、Wolfenstein 3D iPhone 以及 Doom iPhone)。
2. 《Sh*t My Dad Says》
试着保持健康的生活,改变一下,读些有趣的东西吧 : )
注
原文评论栏中推荐的一些补充书目:
1. C Interfaces and Implementations: Techniques for Creating Reusable Software(C语言接口与实现:创建可重用软件的技术)
2. Object-Oriented Programming With ANSI-C
3. 《 Code Complete 2nd edition / 代码大全 第二版》
- C语言之路
- c语言之路
- C语言学习之路
- 开始C语言之路
- C语言学习之路。
- C语言之路 第零章
- c语言学习之路
- 重温C语言之路
- C语言学习之路
- C语言自学之路
- C语言启航之路
- C语言学习之路
- C语言学习之路
- C语言学习之路之一-----------C语言基础
- C语言之路 第一章C语言简介
- C语言之路 第七章 C语言预处理器
- 《编程学习之路》C语言篇-C笔记之C语言概述
- 重走C语言之路
- 在arcgis的help中学习方法
- 跨时钟域的寄存器访问
- Wikilo 1191线段树区间修改单点查询
- 黑马程序员---指针函数 函数指针 指针数组 解析
- ubuntu 安装 openssh-server 直接使用SecureCRT作为ubuntu的远程终端
- C语言之路
- poj3744之矩阵快速幂+概率DP
- operator——内置操作符的函数接口
- SVN基本介绍
- Java学习笔记_6_数组的排序和查找
- MySQL的information_schema数据库是什么,有什么作用
- 全排列的解法
- 今天关于Q_m_l 的研究
- IOS Core Animation Advanced Techniques的学习笔记(二)