P.J.Plauger版本C标准库实现分析之'ctype.h'
如果在你的源代码中经常见到如下代码: /* To Identify a letter */ if ((i >= ‘a’ && i = ‘A’ && i <= ‘Z’)) /* To Identify a digit */ if ( i >= ‘0’ && i <= ‘9’) 这说明你对头文件理解的不是很好,而也恰恰是为了减少代码中重复出现的各种’字符分类’代码而设置的。 ...
如果在你的源代码中经常见到如下代码: /* To Identify a letter */ if ((i >= ‘a’ && i = ‘A’ && i <= ‘Z’)) /* To Identify a digit */ if ( i >= ‘0’ && i <= ‘9’) 这说明你对头文件理解的不是很好,而也恰恰是为了减少代码中重复出现的各种’字符分类’代码而设置的。 ...
I believe that seeing a realistic implementation of the Standard C library can help you better understand how to use it. — P.J.Plauger 按照字母序首先我们来看看<assert.h>,这个文件提供的接口功能很简单,但却是我们极其常用的功能-断言机制(如果条件为False,则输出Diagnostics信息,然后Abort)。当然在最终产品中使用断言并不是一种好的方法,不过断言是一种很有用的帮助我们调试程序的好工具。 ...
在2005年初曾经写过一篇文章叫’结识Ruby’,当时的确是刚刚结识Ruby这种语言,好奇心使然,遗憾的是之后没有坚持学习下去,也就是在这一年Ruby获得了很大的发展,特别是Ruby On Rails的出现让Ruby一下成为新兴语言的代表,甚至有人预言Ruby将会成为Java的替代者成为下一代主流语言。无论如何,Ruby的日益被广大开发人员所接受是个不争的现实,就连Martin Fowler到中国讲’敏捷’时都向中国的开发人员推荐Ruby。大师都开始学习和使用Ruby了,我们还等什么呢?有空儿的时候就多学学吧。 ...
在近期的一次工作交接中,在我的代码中发现了很多’安全隐患’,主要是以’字符串拷贝’为主。这种安全漏洞在C编程中是较为常见的,防范起来也较为容易,这里我们就来一起探索一下’字符串拷贝’的’密码’。 ...
当一个算法(如二分查找)中包含对自己的递归调用时,关于这个算法时间复杂性的分析最终都转化为一个递归方程的求解问题,而这样的算法不在少数。实际上这是数学领域的问题,但是计算机科学又怎么能脱离数学而存在呢?^_^ 数学是好东西呀,可惜自己在这方面造诣颇浅,今生之遗憾亚。^_^ ...
这也是在ChinaUnix上看了几篇关于C语言’位域(Bit Fields)‘的帖子之后,才想写下这篇文章的。其实在平时的工作中很少使用到’位域’,我是搞服务器端程序设计的,大容量的内存可以让我毫不犹豫的任意’挥霍’^_^。想必搞嵌入式编程的朋友们对位域的使用应该不陌生吧。这里我也仅仅是凭着对C语言钻研的兴趣来学习一下’位域’的相关知识的,可能有些说法没有实践,缺乏说服力。 ...
下午到ChinaUnix C/C++版看了看,发现一个比较有意思的问题,一位兄弟在其帖子中问一段很简单的程序明显有数组越界访问之错误,可程序为什么运行起来却’安然无恙’,我看看了看,也给出了我自己的回复,晚上下班后又想想了这个问题,决定写一篇blog说说。 这位仁兄的程序(据他个人说来源自’GNU/Linux编程指南’)是这样的: ...
关于内存对齐的话题,始终是敏感的。稍有不慎,必将闯下大祸!最近项目稍显轻闲,自己给自己安排一天反思和总结一下,突然想到以前写过的一篇’也谈内存对齐’,那篇文章谈的是内存对齐的基本知识以及一些实验的数据,想必很多人看完后,会收获一些东西,但是对内存对齐的应用还是处于懵懂状态,其实大部分时间我们是不会显式的用到’内存对齐的’,但是有些时候我们需要这样做。这里做了一个小例子,希望能给大家以启发。 ...
上午我们的一个实施组从现网发回来一封邮件,接到这种邮件一般都是报告问题的,果然不出所料,现场出现一个core,经过分析这是个由于线程函数参数存储位置不当造成的,从中我们可以总结出一些经验,以避免以后再犯。 ...
我们知道父进程在子进程被fork出来之前打开的文件描述符是能被子进程继承下来的,但是一旦子进程已经创建后,父进程打开的文件描述符要怎样才能传递给子进程呢?Unix提供相应的技术来满足这一需求,这就是同一台主机上进程间的文件描述符传递,很美妙而且强大的技术。 ...