浅谈Unix和Linux下的int
作者 佚名技术
来源 Linux系统
浏览
发布时间 2012-04-21
indows的变量类型多,程序员学习的时候,成本高,但是,学会了就不容易出错.而Unix的学习曲线低,没那么多类型名要去背,不过呢,用起来出不出错,自理啊,Unix的开发者,相信大家的实力.嗯,只是我自己有点信不过我自己,嘿嘿.
不过要我说呢,还真说不好谁对谁错,其实都有道理,关键看OS的设计者,心目中的目标用户的水平如何了.
回到和平同学的问题,用int,少一半,其实是有道理的,int是有符号的,有一半的表示范围是负数,在表示很多容量的时候,比如说吧,malloc的数组,或者socket的表示范围,确实负数没有意义.因此,看起来被浪费了.
这其实不然,为什么,原因很简单.
int就算少一半,你能用多少?和平同学别见怪啊,我说句话,你问这个问题就表示还有点学生思维,总是想多多益善,就是我要把所有的资源都纳入我的管理,呵呵.其实我们做工作做久了的,对于数据的边界、范围,反而有个思想,够用就好,没必要多.
int表示少一半,2G有吧,嗯,大多数用户的数组,可不可能超过1G?其实,大多数时候,我们在这个地方用int,表示的范围都很少的.少一半也够用.socket不说了吧,理论上只有65536,int再少几半也够用,呵呵.
够用就行了,不用担心的,真要是需要用大表示,自己做unsigned long来表示,也是可以的.
,Unix这么设计,有个最大的优点,就是数据的自描述特性得到了前所未有的发挥.我们都知道,在表示范围、容量的时候,int只使用了正数部分,那负数部分做什么?我来回答你,表示非法值,这个很重要.
试想一下,如果我们用的数据类型里面,无法表示非法值,那麻烦了,api设计的时候,单独设计一个参数,来传递非法值,这又涉及到&传址调用,或者*直接传指针调用,程序设计复杂度直线上升,设计的人也累,学的人也累,用起来更累.
这么说可能不直观,我举个例子:
比如我要设计一个read函数,从某个文件id读取一段数据,大家注意啊,Unix下,文件ID可以表示任何串行化设备的.包括socket,可以用resv这类伯克利socket api,也可以直接使用C基本库的read,都对,使用int表示,Unix可以把所有串行化设备统一编址处理,用一类函数处理完.
函数原型我这么设计,设计了两个,大家比较一下:
Code:
在线底价购买《0bug-C/C 商用工程之道》 (直接点击下面链接或拷贝到浏览器地址栏) http://s.click.taobao.com/t_3?&p=mm_13866629_0_0&n=23&l=http://search8.taobao.com/browse/0/n-g,orvv64tborsvwmjvgawdkmbqgboq---g,gaqge5lhebbs6qzlfmqmttgtyo42jm6m22xllqa-------------1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20---40--coefp-0-all-0.htm?pid=mm_13866629_0_0 肖舸 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |
你可能对下面的文章感兴趣
关于浅谈Unix和Linux下的int的所有评论