免费注册 查看新帖 |

Chinaunix

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

[C] 我觉得在C里面static和register是2个有点搞笑的特性。 [复制链接]

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-02-19 11:51 |只看该作者 |倒序浏览
本帖最后由 fender0107401 于 2011-02-19 11:53 编辑

先说static吧,

1. 可以加在external variable前面,然后只有这个source file的function才能看见,

2. 可以加在函数声明前面,同上。

3. 可以加在local variabl前面,这个还有点用,但还是应该尽量避免吧。

问题是1、2两会有人这么写吗?用source file来限定scope?

觉大多数的人都是写在header file里面吧。

变量或者函数的scope应该是一个比较严肃的问题,怎么能拿source file来限定呢?反正觉得很奇怪。

再说register吧,

编译器可以忽略,声明多了也没用,还不是所有的类型都能放进去,还要取决于下层的hardware,

更加要命的是声明成这个了以后还没有办法获取其地址,那怎么玩指针啊,

这么多条条框框,让人望而生畏,而且似乎很难预测用了以后的结果,很难保证用了会变快。

有人用这个吗?编译器都respect这个东西吗?反正我觉得够呛。

论坛徽章:
0
2 [报告]
发表于 2011-02-19 11:59 |只看该作者
回复 1# fender0107401


    Linux内核里面有大量的static,请嘲笑Linux的内核工程师。
    register 有它的历史原因,现在确实没有什么用了,C语言有快40年的历史了,有历史问题不足奇。

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
3 [报告]
发表于 2011-02-19 12:02 |只看该作者
回复 2# baozhao

这么说static还是很有实际通途的?

论坛徽章:
0
4 [报告]
发表于 2011-02-19 12:07 |只看该作者
回复 3# fender0107401


    当然,如果是大规模的项目,static可以减少namespace的污染和冲突

论坛徽章:
89
水瓶座
日期:2014-04-01 08:53:31天蝎座
日期:2014-04-01 08:53:53天秤座
日期:2014-04-01 08:54:02射手座
日期:2014-04-01 08:54:15子鼠
日期:2014-04-01 08:55:35辰龙
日期:2014-04-01 08:56:36未羊
日期:2014-04-01 08:56:27戌狗
日期:2014-04-01 08:56:13亥猪
日期:2014-04-01 08:56:02亥猪
日期:2014-04-08 08:38:58程序设计版块每日发帖之星
日期:2016-01-05 06:20:00程序设计版块每日发帖之星
日期:2016-01-07 06:20:00
5 [报告]
发表于 2011-02-19 12:19 |只看该作者
大概是我胆小吧,我总觉得一个函数over了他所有使用的变量就应该跟着over,如果这个变量还活在内存里面我就感觉是个隐患。

不过有时候static似乎是比较方便,我喜欢拿它来做个计数器什么的。

比如调试的时候统计一下某一个操作的执行次数。这个都是挺爽的。

论坛徽章:
0
6 [报告]
发表于 2011-02-19 12:57 |只看该作者
register是历史遗留
inline也在也在逐渐变得多余
不过c++里auto已经重生
也许某一天register也会复活

论坛徽章:
0
7 [报告]
发表于 2011-02-19 13:00 |只看该作者
围观楼主

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
8 [报告]
发表于 2011-02-19 13:09 |只看该作者
先说static吧,

1. 可以加在external variable前面,然后只有这个source file的function才能看见,

2 ...
fender0107401 发表于 2011-02-19 11:51



1,2我是经常用的,不是写在头文件里面,是写在实现文件里面.可以隐藏一些实现,还可以防止命名冲突等等.
我觉得蛮有用的.

论坛徽章:
0
9 [报告]
发表于 2011-02-19 13:22 |只看该作者
楼上大侠,如果在双核机器上,使用register会有什么问题?

论坛徽章:
1
射手座
日期:2013-08-21 13:11:46
10 [报告]
发表于 2011-02-19 13:27 |只看该作者
楼上大侠,如果在双核机器上,使用register会有什么问题?
houxiongpo 发表于 2011-02-19 13:22


register没用过...
貌似还没写过很慢的程序,非要用寄存器不可
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP