免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 5797 | 回复: 13
打印 上一主题 下一主题

Unix为什么这么多宏定义的类型? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2008-11-18 09:52 |只看该作者 |倒序浏览
制定POSIX标准的那些人为什么这么喜欢搞出一些毫无意义的新类型出来,比如
struct rlimit {
    rlim_t rlim_cur;
    rlim_t rlim_max;
};
我觉得 rlim_t 这个类型毫无意义,因为它看着崭新,实际上只是用#define 或者typedef定义出来的老把戏,而且我们赋值的时候也是直接用rlim_cur=10000,我就想不明白为什么不直接用int 或者long,偏偏要搞出这么难看的rlim_t出来.

类似的,还有pid_t, 各种各样的size_t, 这些乱七八糟的类型搞得代码难看得要死.

或者因为可移植性?

[ 本帖最后由 lipingtababa 于 2008-11-18 10:14 编辑 ]

论坛徽章:
3
戌狗
日期:2014-09-10 17:07:162015年辞旧岁徽章
日期:2015-03-03 16:54:15wusuopu
日期:2016-06-17 17:43:45
2 [报告]
发表于 2008-11-18 09:53 |只看该作者
原帖由 lipingtababa 于 2008-11-18 09:52 发表
制定POSIX标准的那些人为什么这么喜欢搞出一些毫无意义的新类型出来,比如
struct rlimit {
    rlim_t rlim_cur;
    rlim_t rlim_max;
};
我觉得 rlim_t 这个类型毫无意义,因为它看着崭新,实际上只是用 ...

可移植性。(或许还可能作者某天想修改类型,方便些)

论坛徽章:
0
3 [报告]
发表于 2008-11-18 09:57 |只看该作者
你是说分离标准和实现?

能举个例子说明某个类型由于这么定义,而获得可移植性和封装的效果吗?

论坛徽章:
0
4 [报告]
发表于 2008-11-18 10:22 |只看该作者
这就好比一般都要求把常量用宏或者const变量替代一样,一来有个名字可以更清楚它的意义,而来改天要改动这个变量了也方便,只要在定义的地方改就行了.

论坛徽章:
0
5 [报告]
发表于 2008-11-18 10:25 |只看该作者
没错, 这样就能达到很好的可移植性!

楼说可以试想一下, typedef一个类型, 然后用这个新类型去声明变量!

如果在某些时候, 类型长度可能不够用了, 或是跨平台的差异! 你只要更改一下typedef就可以解决所有的变量长度问题.

否则你就只能在程序里慢慢的一个一个改了!

论坛徽章:
0
6 [报告]
发表于 2008-11-18 10:27 |只看该作者
我的代码里也很多。

还有用宏给结构体赋值的。

论坛徽章:
0
7 [报告]
发表于 2008-11-18 11:11 |只看该作者
应用程序从32位系统迁移到64位系统,就可以改很少的地方了。

论坛徽章:
0
8 [报告]
发表于 2008-11-18 11:46 |只看该作者
原帖由 linternt 于 2008-11-18 10:25 发表
没错, 这样就能达到很好的可移植性!

楼说可以试想一下, typedef一个类型, 然后用这个新类型去声明变量!

如果在某些时候, 类型长度可能不够用了, 或是跨平台的差异! 你只要更改一下typedef就可以解决所有的 ...


赞同这个说法。

论坛徽章:
1
2015年辞旧岁徽章
日期:2015-03-03 16:54:15
9 [报告]
发表于 2008-11-18 12:40 |只看该作者
原帖由 lipingtababa 于 2008-11-18 09:57 发表
你是说分离标准和实现?

对,就是这个意思。
不要光盯着实现,一定要注意标准。

论坛徽章:
0
10 [报告]
发表于 2008-11-18 13:00 |只看该作者
但我还不是个好办法.

1.这样增加了写代码的麻烦.你要一边盯着man page一边写代码,不然你根本不知道它是rlim_t,还是rlimit_t,还是rl_t

2.写出来的代码太难看.

3.由于大家都是直接当作int用,比如 printf("%d\n", rlim);所以可移植性也大打折扣,停留在了理论层面.
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP