浅谈Unix和Linux下的int
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-21
这也算和平同学的点题作文了,呵呵. 他对于Linux下很多时候,api函数大量使用int作为常用类型感到不解,问我,我呢,就试着回答一下哈. 原帖在这里:http://student.csdn.net/space.php?uid=121080&do=thread&id=9168 问题如下: 根据<c primer>建议,表示像“容量”这样的变量时,不可能出现负数,建议用size_t类型.但是linux下的程序,好像比较喜欢使用int. 为什么不使用size_t(或者unsigned int)而使用int?表示范围不是少了一半吗? 我的回答: 嗯,这个问题算是比较偏门了,不过,我做过Windows开发,也做过Linux开发,两个平台都用过,没什么道理哈,仅仅谈点自己的感觉,嗯,不一定准确,大家有高见,还可以补充. 我觉得这个问题是一个文化问题.什么叫文化,就是做这类事情的人们的一个通常的共识,就是大家都习惯这么做事.我很早,嗯,07年开始转向Linux开发的时候,就发现这点不同. Windows呢,是微软公司开发的,大公司,强调严谨的开发风格,大家可以从它推崇匈牙利命名法就看的出来.它对于变量命名,类型命名是有严格规定的,要求尽量准确,不给后来者留歧义.比如,很多Struct*,它会使用typedef显式定名为一种新类型PStruct来管理,这样,大家从字面上就可以一眼看出来,而不用到用的时候,跑去数星星.数星星很容易数错的.我就干过坏事,嘿嘿. 这个道理也很简单,微软是开发OS的,说白了,它的主要产品功能,除了Windows的操作功能,还需要提供大量的api给广大程序员用,没办法啊,如果没人给他的操作系统开发应用程序,他的OS卖不动的. 这就要求微软不仅仅关注终端用户的体验,也特别关注程序员用户的体验,而明示的api,显然是一种很好的用户体验,程序员不容易犯错误,被api的提供者约束着做正确的事情,程序员bug少,成功率就高,进而开发成本就低,于是,形成良性循环. 同时,这也为微软的客服部门减少好多投诉哦,大家换位思考一下,如果微软的api含糊不清,大家是不是要发飙?呵呵. 这里面体现出来一个很重要的思想,微软是把广大应用程序员,也作为什么都不懂的终端用户在看待,试图从api上构建最大的开发友好度,因此,它对于命名法很严格,api定名表意很清晰,同时,对于各种变量、类型,不厌其烦,多次定义,为了是让各个行业的程序员, 用起来都尽量贴合自己的行业习惯. 这是有道理的,比如我现在在电力系统,我们定义变量类型,喜欢用Int16、Int32、Int64,Float16、Float32、Float64这类命名,int、double这些C/C 基本类型,反而不太流行.为啥,很多时候工业现场的人,不知道你这个类型到底是多少bits的,就会出错.这是为了用户看着清晰,也是行业习惯,,我很多时候开始写程序前,都要先去定义这么一批新的变量类型,方便和同事们沟通代码啊. 而Unix呢,不太一样,我看过《Unix编程艺术》这本书,这里面讲了很多Unix程序员的文化.这么说吧,我简单点,Unix的开发者,默认使用者是和其水平相当的程序员,大家所有沟通的语言,都是计算机本专业的,大家很多时候用默认,暗示,就好了. ,Unix下的习惯,没有那么多分门别类的变量类型,大家还有个好习惯,呵呵,int包打一切.我看到几乎大多数Unix的函数,就是gcc的基本库,函数老是int来,int去,其实,给我的感觉,在Unix下,什么都是int,为啥,Unix很讲究把同类资源数组化管理,比如打开的文件句柄,就是一个整数,进程ID,整数,线程ID,整数,用户ID,整数,甚至,设备都是整数表示.嗯,socket不说了,Windows下是一个特定数据类型SOCKET,而Unix下,你猜对了,没错,int,整数. 这叫什么?其实是向量化管理,在系统内部检索的时候,可以想象,Unix系统的开发者,大量使用数组,利用int这个整数在哈希检索目标,达到效率最高.反正,我们不管什么资源,在Unix内部,就是一个int型的ID表示,这其实已经是Windows句柄的概念了. 这两种命名方法,其实各有优缺点,W |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于浅谈Unix和Linux下的int的所有评论