`
varsoft
  • 浏览: 2442052 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论
文章列表
【译者注】Eric Raymond是开源运动的领袖人物,对于UNIX开发有很深的造诣,主持开发了fetchmail。他的《大教堂与集市》被奉为开源运动的经典之作。下面对几大开发语言的评价非常中肯,是我近年来看到的比较出色的评论。特别是 ...
28、||和&&的语句执行顺序————————————条件语句中的这两个“与”和“或”操作符一定要小心,它们的表现可能和你想像的不一样,这里条件语句中的有些行为需要和说一下: express1 || express2 先执行表达式express1如果为“真”,express2将不被执行,express2仅在express1为“假”时才被执行。因为第一个表达式为真了,整个表达式都为真,所以没有必要再去执行第二个表达式了。 express1 && express2 先执行表达式express1如果为“假”,express2将不被执行,express2仅在e ...
16、把相同或近乎相同的代码形成函数和宏————————————————————— 有人说,最好的程序员,就是最喜欢“偷懒”的程序,其中不无道理。 如果你有一些程序的代码片段很相似,或直接就是一样的,请把他们放在一个函数中。而如果这段代码不多,而且会被经常使用,你还想避免函数调用的开销,那么就把他写成宏吧。 千万不要让同一份代码或是功能相似的代码在多个地方存在,不然如果功能一变,你就要修改好几处地方,这种会给维护带来巨大的麻烦,所以,做到“一改百改”,还是要形成函数或是宏。 17、表达式中的括号————————— 如果一个比较复杂的表达式中,你并不是很清楚各个操作符的忧先级,即使是 ...
11、出错信息的处理—————————你会处理出错信息吗?哦,它并不是简单的输出。看下面的示例: if ( p == NULL ){ printf ( "ERR: The pointer is NULL\n" ); }告别学生时代的编程吧。这种编程很不利于维护和管理,出错信息 ...
23、static的使用————————static关键字,表示了“静态”,一般来说,他会被经常用于变量和函数。一个static的变量,其实就是全局变量,只不过他是有作用域的全局变量。比如一个函数中的static变量: char*getConsumerName(){ ...
1、版权和版本———————好的程序员会给自己的每个函数,每个文件,都注上版权和版本。 对于C/C++的文件,文件头应该有类似这样的注释:/************************************************************************** 文件名:network.c** 文件描述:网络通讯函数集** 创建人: Hao Chen, 2003年2月3日** 版本号:1.0** 修改记录:*************************************************************************/ 而对于函数来 ...
6、if 语句对出错的处理———————————我看见你说了,这有什么好说的。还是先看一段程序代码吧。 if ( ch >= '0' && ch <= '9' ){ /* 正常处理代码 */ }else{ /* 输出错误信息 */ printf("error ......\n"); return ( FALSE ); } 这种结构很不好,特别是如果“正常处理代码”很长时,对于这种情况,最好不要用else。先判断错误,如: if ( ch < '0' || ch > '9' ){ /* 输出错误信息 */ printf(&quo ...
编程修养———— 什么是好的程序员?是不是懂得很多技术细节?还是懂底层编程?还是编程速度比较快?我觉得都不是。对于一些技术细节来说和底层的技术,只要看帮助,查资料就能找到,对于速度快,只要编得多也就熟能生巧了。 我认为好的程序员应该有以下几方面的素质: 1、有专研精神,勤学善问、举一反三。 2、积极向上的态度,有创造性思维。 3、与人积极交流沟通的能力,有团队精神。 4、谦虚谨慎,戒骄戒燥。 5、写出的代码质量高。包括:代码的稳定、易读、规范、易维护、专业。 这些都是程序员的修养,这里我想谈谈“编程修养”,也就是上述中的第5点。我觉得,如果我要了解一个作者,我会看他所写的小说,如果我要 ...
i++、++i、i=i+1、效率怎么样?看过一本书上说,i++比i=i+1好的地方是因为i=i+1中的那个1要占用一个寄存器,所以速度没有i++快,于是我想验证一下。另外,以前听说过Java中的“i=i++”得不到正确结论,也就是应该是“先累加再赋值”,但Java经过这种运算后,i值居然没有变化。所以在这里,想一并把这几个问题在C中验证一下。 =====================测试的C源程序==================== #01: #include <stdio.h>#02: #03: main()#04: {#05: int i=0, j=0;#06: i=i ...
最近我在做一个项目,其中要用到一个数据结构——Hash Table(哈希表),以前只有理论知识,现在实却发现很不简单,所以写下来和大家共分享。 我们知道,哈希表是一个固定大小的数组,数组的每个元素是一个链表(单向或双向)的头指针。如果Key一样,则在一起,如果Key不一样,则不在一起。哈希表的查询是飞快的。因为它不需要从头搜索,它利用Key的“哈希算法”直接定位,查找非常快,各种数据库中的数据结构基本都是它。但带来的问题是,哈希表的尺寸、哈希算法。 哈希表的数组是定长的,如果太大,则浪费,如果太小,体现不出效率。合适的数组大小是哈希表的性能的关键。哈希表的尺寸最好是一个质数,最小的质数尺寸是 ...
比如在一个项目中,有大量的数据结构,他们都是双向链表,但又想共用一套对链表的操作算法,这怎么做到呢,C中又没有C++中的继承,不然我可以继承一父(类中只有两个指针,一个向前一个向后),而其算法可以写在你类中的虚函数中,供子类使用。如: class Links{public: Links* back; Links* forword; virtual Add(){ ... }; virtual Del(){ ... }; virtual Ins(){ ... }; virtual Print() =0; .... }; 于是对于特定的数据结构我们可以:class mylinks : pub ...
什么是契约——Eiffel的观点 假设你现在正在面试,主考不紧不慢地给出下一道题目:“请用C语言写一个类似strcpy的函数。要考虑可能发生的异常情况。” 你会怎么做呢?很明显,对方不是在考察你的编程能力,因为复制字符 ...
刚刚发表了《什么是契约》一文,突然发现自己通篇都在写理论,没有实例来证明。所以赶快补充一个反面案例——C++ IOStream。说是反面,不是因为IOStream库设计得不精彩(恰恰相反,你很难找到比IOStream设计更为精彩的C++库了),而是想展示一下,在没有契约概念的思想体系里,组件设计将为权责不清的错误处理付出多大的代价。 大家知道,C++ IOStream库非常经典,最先起源于Bjarne Stroustrup的Stream库,之后经过Jerry Schwartz、Martin Carroll、Andy Koenig等人的改进,成为IOStream库,并被并入Bell实验室发行的U ...
几个月前,我在CSDN上发表了一篇短文,叫《风格的选择》。在那篇文章里,我提出一个观点:面对不同应用领域和环境,C++的开发者应该主动剪裁语言,选择最合适自己领域的C++子集进行具体开发。这是从我的实际工作中总结 ...
MISRA--作为工业标准的C编程规范 MISRA (The Motor Industry Software Reliability Association 汽车工业软件可靠性联会) 是位于英国的一个跨国汽车工业协会,其成员包括了大部分欧美汽车生产商。其核心使命是为汽车工业提供服务和协助,帮 ...
Global site tag (gtag.js) - Google Analytics