02 2012 档案

摘要:本文介绍了GCC和C99标准中inline使用上的不同之处。inline属性在使用的时候,要注意以下两点:inline关键字在GCC参考文档中仅有对其使用在函数定义(Definition)上的描述,而没有提到其是否能用于函数声明(Declare)。 从 inline的作用来看,其放置于函数声明中应当也是毫无作用的:inline只会影响函数在translation unit(可以简单理解为C源码文件)内的编译行为,只要超出了这个范围inline属性就没有任何作用了。所以inline关键字不应该出现在函数声明 中,没有任何作用不说,有时还可能造成编译错误(在包含了sys/compiler.... 阅读全文
posted @ 2012-02-27 23:44 Mr.Rico 阅读 (20916) | 评论 (0) 编辑
摘要:C++中的inline是个容易被误解的关键字,即使是专家也常会犯错。不信?请打开《Thinking in C++ 2rd Edition Volumn 1》,找到Chapter 9 "Inline Function"的Exercise 6:“Prove that inline functions default to internal linkage."为什么我说这里作者犯错了呢?因为C++ 03标准中角标79处明确写到:“ The inline keyword has no effect on the linkage of a function.“ 看,标准明确 阅读全文
posted @ 2012-02-27 23:33 Mr.Rico 阅读 (340) | 评论 (0) 编辑
摘要:平时在Linux下写代码,直接用"gcc -o out in.c"就把代码编译好了,但是这后面到底做了什么事情呢?如果学习过编译原理则不难理解,一般高级语言程序编译的过程莫过于:预处理、编译、汇编、链 接。gcc在后台实际上也经历了这几个过程,我们可以通过-v参数查看它的编译细节,如果想看某个具体的编译过程,则可以分别使用-E,-S,-c和 -O,对应的后台工具则分别为cpp,cc1,as,ld。下面我们将逐步分析这几个过程以及相关的内容,诸如语法检查、代码调试、汇编语言等。1、预处理 开篇简述:预处理是C语言程序从源代码变成可执行程序的第一步,主要是C语言编译器对各种预处 阅读全文
posted @ 2012-02-27 22:42 Mr.Rico 阅读 (166) | 评论 (0) 编辑
摘要:一、模板特化(specialization of template)模板特化(specialization of template)并不是说实例化一个模板,如template <class T>,class stack<T>;声明stack<int>,这是实例化一个模板类。类模板特化的意思是,对于某个特定的类型,需要对模板进行特殊化,即特殊的处理。例如,stack类模板针对bool类型有特化,因为实际上bool类型只需要一个二进制位,就可以对其进行存储,使用一个字或者一个字节都是浪费存储空间的.同样,函数模板特化也是针对某个特定类型的特殊处理,一个比较经典的 阅读全文
posted @ 2012-02-27 22:01 Mr.Rico 阅读 (107) | 评论 (0) 编辑
摘要:如何判断栈的增长方向?对于一个用惯了i386系列机器的人来说,这似乎是一个无聊的问题,因为栈就是从高地址向低地址增长。不过,显然这不是这个问题的目的,既然把这个问题拿出来,问的就不只是i386系列的机器,跨硬件平台是这个问题的首先要考虑到的因素。在一个物质极大丰富的年代,除非无路可退,否则我们坚决不会使用汇编去解决问题,而对于这种有系统编程味道的问题,C是一个不错的选择。那接下来的问题就是如何用C去解决这个问题。C在哪里会用到栈呢?稍微了解一点C的人都会立刻给出答案,没错,函数。我们知道,局部变量都存在于栈之中。似乎这个问题立刻就得到了解答,用一个函数声明两个局部变量,然后比较两个变量的地址, 阅读全文
posted @ 2012-02-27 10:56 Mr.Rico 阅读 (3386) | 评论 (0) 编辑
摘要:1. const变量声明中带有关键词const,意味着不能通过赋值,增量或减量来修改该变量的值,这是显而易见的一点。指针使用const则要稍微复杂点,因为不得不把让指针本身成为const和指针指向的值成为const区别开来、下面的声明表示pf指向的值必须是不变的constfloat *pf;而pf则是可变的,它可以指向另外一个const或非const值;相反,下面的声明说明pf是不能改变的,而pf所指向的值则是可以改变的:float* const pf;最后,当然可以有既不能改变指针的值也不能改变指针指向的值的值的声明方式:constfloat * const pf;需要注意的是,还有第三种放 阅读全文
posted @ 2012-02-27 10:23 Mr.Rico 阅读 (1090) | 评论 (0) 编辑
摘要:按照编译原理的观点,程序运行时的内存分配有三种策略,分别是静态的,栈式的,和堆式的. 静态存储分配是指在编译时就能确定每个数据目标在运行时刻的存储空间需求,因而在编译时就可以给他们分配固定的内存空间.这种分配策略要求程序 代码中不允许有可变数据结构(比如可变数组)的存在,也不允许有嵌套或者递归的结构出现,因为它们都会导致编译程序无法计算准确的存储空间需求. 栈式存储分配也可称为动态存储分配,是由一个类似于堆栈的运行栈来实现的.和静态存储分配相反,在栈式存储方案中,程序对数据区的需求在编译时是完 全未知的,只有到运行的时候才能够知道,但是规定在运行中进入一个程序模块时,必须知道该程序模块所... 阅读全文
posted @ 2012-02-26 15:53 Mr.Rico 阅读 (106) | 评论 (0) 编辑
摘要:set命令可以用来定制shell环境,使用选项“o”来打开或者关闭选项。例如打开选项:set -o 选项,关闭选项目:set +o 选项。 例如要打开vi交互式命令行编辑,则如下: [root@localhost ~]# set -o #查看当前设置情况 ...... privileged off verbose off vi off #关闭中 xtrace off ... 阅读全文
posted @ 2012-02-19 23:33 Mr.Rico 阅读 (522) | 评论 (0) 编辑
摘要:多态性----vptr----vtable 多态性 (polymorphism) 是面向对象编程的基本特征之一。而在 C++ 中,多态性通过虚函数 (virtual function) 来实现。我们来看一段简单的代码: #include<iostream>usingnamespacestd;classBase{inta;public:virtualvoidfun1(){cout<<"Base::fun1()"<<endl;}virtualvoidfun2(){cout<<"Base::fun2()"< 阅读全文
posted @ 2012-02-16 11:18 Mr.Rico 阅读 (237) | 评论 (0) 编辑
摘要:作者:menggucaoyuan当你启动计算机之后,windows的启动过程就开始执行了。下面是详细步骤: 1BIOS执行一些初始系统检查,并读取磁盘的第零簇的内容。第零簇内容有一个特殊的称谓-操作系统主引导扇区MBR(MasterBootRecord)。 2 MBR保护两部分: 1系统启动代码(共有446bytes) 2分区表入口(16bytescoloredentriesinthebottom) 3 根据系统代码,我们可以找到系统所有的分区,并找到系统启动分区。如果分区表入口的第一个字节值为0x80,那么可以确认这就是分区表入口,它也被称为根分区或系统卷.MBR中有四个分区入口,是不是.. 阅读全文
posted @ 2012-02-10 10:48 Mr.Rico 阅读 (88) | 评论 (0) 编辑
摘要:刚才在论坛不经意间,看到有关源码阅读的帖子。回想自己前几年,阅读源码那种兴奋和成就感(1),不禁又有一种激动。 源码阅读,我觉得最核心有三点:技术基础+强烈的求知欲+耐心。 说到技术基础,我打个比方吧,如果你从来没有学过Java,或是任何一门编程语言如C++,一开始去啃《Core Java》,你是很难从中吸收到营养的,特别是《深入Java虚拟机》这类书,别人觉得好,未必适合现在的你。 虽然Tomcat的源码很漂亮,但我绝不建议你一开始就读它。我文中会专门谈到这个,暂时不展开。 强烈的求知欲,我认为是阅读源码的最核心驱动力。我见到绝大多数程序员,对学习的态度,基... 阅读全文
posted @ 2012-02-04 14:58 Mr.Rico 阅读 (166) | 评论 (0) 编辑
摘要:很 多程序员到了成熟阶段后,就会处于一个停滞状态。技术上已经驾轻就熟,工作上已经按部就班,心里虽然感觉有些不甘,但是何去何从他们显得很茫然很无助。我 认为程序员到了成熟阶段后,如果还想要向优秀阶段发展,一定会遇到这个瓶颈的,穿过这个瓶颈就会走进另一片开阔的前景,穿不过则会停留在原地止步不前。 1、技术瓶颈 技 术上的瓶颈是很明显的,主要表现在,对学习缺乏热情,对技术缺乏钻研,对新技术发展缺乏了解等三个主要方面。其中原因主要是:第一,成熟的程序员编程技术 已经能够满足开发软件的要求,很多人认为只要能编出来就行了,至于编得更好,那就要看兴趣了,看... 阅读全文
posted @ 2012-02-03 16:35 Mr.Rico 阅读 (78) | 评论 (0) 编辑
摘要:C++这门语言从诞生到今天已经经历了将近30个年头。不可否认,它的学习难度都比其它语言较高。而它的学习难度,主要来自于它的 复杂性。现在C++的使用范围比以前已经少了很多,java、C#、python等语言在很多方面已经可以代替C++。但是也有很多地方是其他语言完全无 法替代的,主要集中在需要运行效率比较高的行业,比如游戏、高效的服务器。 现在学习java、C#等语言的人数远远高于C++,主要是C++的入门门槛太高,可能学习了一段时间后还做不了什么东西,导致信心大受打击,进而放弃。 我想把我自己的经验分享给大家,希望帮助新人少走些弯路。 在此我们不讨论具体的技术细节,只说我们应该学习什么东西。 阅读全文
posted @ 2012-02-03 16:34 Mr.Rico 阅读 (365) | 评论 (0) 编辑
摘要:在一封与TechRepublic会员交流的邮件当中,提到了面向程序员的博客、文章及杂志分成两类:面向初学者类以及面向专家类。这个观点很好,有关程序员如何从初级跃升到中级的信息极少。以下是为了实现这种转变需要你去做的10件事。 1. 学习另一门语言 其实你学的是哪一门语言并没有关系,但是学习另一门语言(不管你已经了解多少种语言)将把你打造为更好的程序员。能学会一门与你日常使用的语言风格 迥异的 语言则更佳。打个比方,如果你是C#程序员,学习VB.NET或者Java对你的帮助就没有学习Ruby或者Groovy大。 我说“学另一门语言”的意思是要真正学会它。学习一门语言包括三个领域的知识:语法、内置 阅读全文
posted @ 2012-02-03 16:32 Mr.Rico 阅读 (261) | 评论 (0) 编辑
摘要:这多年来,我面试过很多程序员。最近,我在思考一个事情,究竟通过一个什么样的问题能够最大的获取一个人对于编程的能力和热忱的信息。 我总结出来,只有这个问题具有最强的钻透力: 你在业余时间都开发过什么? 我喜欢这个问题,因为它一次触及到了很多方面。业余时间是一种很宝贵的资源,你通常会把它用到你最感兴趣的事情上。如果把这种资源用于开发,这是一 个 很强的信号,说明你热心于此。另一方面,如果得到的回复是“啊?”或“在业余时间?”,这也许能很好的提示你,他可能不是你要找的人。 而他们所做的是些什么事情,也是一个有趣的指示器。他们是否对开源项目捐赠过代码?是否有过把一种工具移植到... 阅读全文
posted @ 2012-02-03 16:31 Mr.Rico 阅读 (277) | 评论 (0) 编辑
摘要:由于明年项目业务的扩展,所以在现有的团队中,我还要再招 2-3 名Office开发的新成员作为正式的专职员工,在此聊聊我在招聘过程的感受,和大家交流些经验,特别是「为什么写技术博客对新人如此重要?」。希望对在职者有所帮助,也对新人有所启发。 台湾和大陆的对比 首先谈谈台湾情况,Programmer 在台湾不叫程序员,而是程式设计师,从搜索引擎找台湾程序员,往往得到的是内地搜索结果。过去程式设计师在台湾地位很高,但近十年来,年轻一代越来越不热 衷编程,台湾资讯工程相关科系的最低录取分数也是下降趋势,所以在台湾要找程序员不是没有,只是技术水平和主动积极性已大不如前。 大陆因为人口众多,每年都是新人 阅读全文
posted @ 2012-02-03 16:29 Mr.Rico 阅读 (225) | 评论 (0) 编辑
摘要:2010年初写过一篇博客(我们是一群和平年代充满浮躁与抱怨的程序员),一年过去了,社会好像更浮躁,也有网友问我这方面的问题,于是有了下面这篇文章,再次写给我们这些刚入行浮躁的程序员,如何成长,以下是列出了一些成长的心得,我们不必每条都去实践,但是优秀的程序员成长过程中总会实践里面的几条。 多做项目,多思考 不要害怕做事,刚毕业的同学最缺的就是工作经验,乱七八糟的项目能让你很快就了解了一个公司的业务与使用的技术,并且可以多接触同事与客户。 当你毕业后刚进一家公司时,如果主管没有把你安排到项目组工作,那真的很杯具,因为他认为你还不能胜任工作或者你的加入会让项目组更糟。 还有人说,我刚进公司,... 阅读全文
posted @ 2012-02-03 16:28 Mr.Rico 阅读 (264) | 评论 (0) 编辑
摘要:一个老程序员的建议 当然,所有的这些话都是没有意义的。如果通过这本书,你喜欢上了编程,你应该尽你最大的努力,通过它来改善你的生活。去探索这神奇的精彩的智力活动,也只有近50年来的人有机会从事这种职业。如果你喜欢它,就尽情的热爱它吧。 最 后我要说的是,学习开发软件会改变你,让你与众不同。不论是好的不同还是坏的,反正是不同。你会发现,因为你会开发软件,人们会对你很冷淡,会用 “书呆子”这样的词形容你。你会发现,由于你善于剖析逻辑,人们痛恨跟你辩论。你甚至会发现,只是简单的懂一些计算机原理都会给你带来很多烦恼,让你跟他 们比起来怪怪的。 对于这些问题,我只有一点小建... 阅读全文
posted @ 2012-02-03 16:19 Mr.Rico 阅读 (82) | 评论 (0) 编辑
摘要:在从事软件开发的这些年中,近期越来越多地听到这样的论点:当前的程序员越来越浮躁。我的感觉也是如此,由于在软件公司中,人才流动特别快,因此很 多人的职位也变化的比较快,很可能刚刚工作了三年的程序员,就被冠以项目经理的职位,或者是做过几个项目的人,就成为一家小公司的技术总监、架构师,其 实,本身的能力与这个职位真正的要求非常不相配。然而,正是这样的情况更促使了程序员的浮躁心理,或许也可是说是攀比的心态和虚荣心在作怪。 上述情况的直接表现就是,很多程序员在具备了一定的经验之后,就不喜欢做“小事”,这里的小事可能是: 重复性的事情简单的事情编写程序之外的事情(比方做报表的模板) 他们喜欢把这种事交给刚 阅读全文
posted @ 2012-02-03 12:28 Mr.Rico 阅读 (52) | 评论 (0) 编辑
摘要:作为程序员的我们,在想要解决业务需求的时候,手中握有几种武器呢? 首先我们必须有一种最趁手最熟悉的武器,有人的是java,有人是vb,还有人是c#等等,这种武器是用来解决大型项目中的问题的,我们用的最多,对其了解最深,也最喜欢使用。但是,仅仅这一种武器是否够用,是否足以搞定客户或者业务部门层出不穷的各种需求呢?一般来说还是可以的,只不过在特定的情况下,比方说时间上的要求,用户界面友好程度上的要求,或者是某些特定功能上得要求,我们可能会采用其他武器,从而得到更高的效率,更便捷的操作,或者特定的某种功能。 所以说,手里常备几种武器,还是很有意义的。 拿我自己曾经的经历为例吧。之前曾经在博文中讲述过 阅读全文
posted @ 2012-02-03 12:27 Mr.Rico 阅读 (77) | 评论 (0) 编辑
摘要:写在前面:前几天终于看完了《团队之美》这本厚厚的书,里面叙述了与团队相关的点点滴滴,当然也包括如何创建并维护优秀的团队。让我更深地领略到团队精神在现在的开发中的重要性。感触很多,收获很多,写在这里与大家一起分享。 大家都知道,现在的软件开发已经不再是20年前个人英雄主义的时代,一个超级程序员就能够搞定一切的情况已经很少存在了。更多的情况是我们都是以团队的形式进行系统的设计和开发,因此,团队精神也变得越来越重要。 早在我刚刚毕业要踏入到软件开发这个行业的时候,就在自己的简历里面写到:具有很强的团队精神。然而,说句实话,当时对这个词的理解真的不是那么透彻, 只是觉得人缘好,和别人合得来,就叫... 阅读全文
posted @ 2012-02-03 12:24 Mr.Rico 阅读 (96) | 评论 (0) 编辑
摘要:编程是一种创造过程,业余项目允许程序员在没有截止日期或各种限制的条件下,以探索形式编程。业余项目之所以重要,有以下几个原因。 探索新技术 每天都会不断有新技术出现,而业余项目则是最佳的试验场。作为业余项目,你不必为bug或者性能问题担心,即使网站崩溃也没有问题,因为你不靠它来领薪水。 从头创造 我所从事的大多数都是为现有的产品做一些维护,增加一些新特性,修复bug,解决性能问题,重构现有代码。虽然我也从头编写过一些软件,但这些基础工作只需要一两个月,接下来我又进入维护模式了。 业余项目经常需要从头构建。我喜欢这个步骤,因为我不但复习了已经掌握的所有东西而且把它们应用到创建一个新的(更好的)项目 阅读全文
posted @ 2012-02-02 22:52 Mr.Rico 阅读 (57) | 评论 (0) 编辑
摘要:math.h常用函数 int abs (int x); double acos (double x); double asin (double x); double atan (double x); double atan2 (double y, double x); double atof (const char *s); double ceil (double x); double cos (double x); double cosh (double x); double exp (double x); double fabs (double x); double floor (dou. 阅读全文
posted @ 2012-02-02 22:16 Mr.Rico 阅读 (2424) | 评论 (0) 编辑
摘要:如何参与一个开源项目 2011-06-15 npcomet Posted in 业界评论 | 1 Comment » 最近很多人在问如何参与一个开源项目。其实个人觉得这是一个非常傻的问题,不过还是回答一下,期望这帮人记得用google搜到这个角落,免去论坛上月经一样的天天看到这种傻问题。 为什么说傻?因为这个问题和“如何捐钱”一样,是个没法直接回答的问题。你总要有一个明确的捐献目标,或者是明确的目标项目。世界上没有一个组织,名叫“开源软件”。无论你的目标是什么,你必须找到一个确定的开源项目进行参与。 在哪里能够找到开源项目?这很不好说。一方面,你可以在sf.net(需要翻墙)和cod 阅读全文
posted @ 2012-02-02 22:07 Mr.Rico 阅读 (944) | 评论 (0) 编辑