免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
楼主: fender0107401
打印 上一主题 下一主题

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

论坛徽章:
0
111 [报告]
发表于 2011-02-28 13:20 |只看该作者
存在既合理,我觉得并没什么好搞笑的。static变量的使用是在编译的时候就确定的,而且具体的位置和你写程序的位置没有关系,而是在程序的数据段里。如果你觉得这都不放心,觉得可笑的话。那么,你是不是连
char str[] = "Hello World"; 这样的语句也不敢用,也觉得可笑了呢?

另外,就是register。其实,这个并不能用实际的意义去推测他,这只是给编译器一个提示,能让他在代码优化的时候能够得到考虑。你要是非要在写C的时候考虑编译器的问题,那真的有点越俎代庖,那才有点可笑了。那还不如直接用汇编语言更实际一点。

C语言本身就是一个自由度很高的语言,并不像C++或者Java那样,必须按照某种模式某种规则去运用。这也是C语言吸引我们的原因。其实,很多我们看似优秀的语言,都有类似的错觉,比如Java中的接口和抽象类就是一种。

论坛徽章:
0
112 [报告]
发表于 2011-03-01 08:43 |只看该作者
楼主没看过C专家吗?
看看吧

论坛徽章:
9
摩羯座
日期:2013-08-15 15:18:48狮子座
日期:2013-09-12 18:07:47金牛座
日期:2013-09-16 13:23:09辰龙
日期:2013-10-09 09:03:27白羊座
日期:2013-10-17 13:32:44子鼠
日期:2014-04-23 15:09:38戌狗
日期:2014-09-17 11:37:542015年亚洲杯之韩国
日期:2015-03-26 10:16:442015亚冠之武里南联
日期:2015-08-18 14:55:52
113 [报告]
发表于 2011-03-01 09:47 |只看该作者
存在既合理,我觉得并没什么好搞笑的。static变量的使用是在编译的时候就确定的,而且具体的位置和你写程序 ...
HermitWayne 发表于 2011-02-28 13:20



    LZ所指的是全局的static函数,而不是static局部变量……
另外我对java不怎么了解,无法发表评论,不过据我所知,C++并不是属于“必须按照某种模式某种规则去运用”否则就不能工作的那种类型。

论坛徽章:
0
114 [报告]
发表于 2011-03-01 11:00 |只看该作者
register还是很有用的,在写内核driver和多线程编程时还是有用的。linux代码里也有很多,主要是屏蔽编译器的优化,该值每次都从内存读取,防止因为编译器的优化带来的负面问题。

论坛徽章:
0
115 [报告]
发表于 2011-03-01 11:13 |只看该作者
竟然都不知道 static 函数 比 非 static 函数 快很多? 这个可是性能优化的必用之法。

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
116 [报告]
发表于 2011-03-01 11:14 |只看该作者
register还是很有用的,在写内核driver和多线程编程时还是有用的。linux代码里也有很多,主要是屏蔽编译器的 ...
songweilinux 发表于 2011-03-01 11:00



    是不是指的是volatile哦,编译器优化会自动将部分auto变量变为register

论坛徽章:
0
117 [报告]
发表于 2011-03-01 11:16 |只看该作者
本帖最后由 xr55993 于 2011-03-01 11:21 编辑
register还是很有用的,在写内核driver和多线程编程时还是有用的。linux代码里也有很多,主要是屏蔽编译器的 ...
songweilinux 发表于 2011-03-01 11:00



    你说的那个是volatile

论坛徽章:
0
118 [报告]
发表于 2011-03-01 11:16 |只看该作者
竟然都不知道 static 函数 比 非 static 函数 快很多? 这个可是性能优化的必用之法。
zhuomingliang 发表于 2011-03-01 11:13



    第一次听说,求科普

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
119 [报告]
发表于 2011-03-01 11:25 |只看该作者
全局static函数、变量、常量存在的唯一目的是防止大工程中的不同文件间的符号名冲突。
static局部变量存在的唯一目的是动态变量、常量静态化。所谓静态化是指只分配一次空间,只初始化一次,空间在进程执行期间不释放。

论坛徽章:
0
120 [报告]
发表于 2011-03-01 11:26 |只看该作者
回复 117# xr55993

对哦,我搞错了,好久不弄了,哈哈哈
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP