Chinaunix

标题: 在c中,把一个函数定义为static类型有什么优点么? [打印本页]

作者: cobranail    时间: 2007-05-02 19:00
标题: 在c中,把一个函数定义为static类型有什么优点么?
今天在小黑gimp的时候,发现它的函数几乎都是定义成static的。
这样定义有什么好处么?调用速度更快?
作者: cjaizss    时间: 2007-05-02 19:03
防止不同文件的全局变量、函数重名
作者: MMMIX    时间: 2007-05-02 19:06
原帖由 cjaizss 于 2007-5-2 19:03 发表
防止不同文件的全局变量、函数重名

由此还会衍生出其他一些好处,例如减少链接时间。不过这些都是次要的,主要的就是防止名字冲突,并使得代码结构更清晰。
作者: ypxing    时间: 2007-05-02 19:11
速度更快到是没有听说
只不过一个函数中的static变量只会在该函数第一次调用时被初始化一次,
然后每次调用都可以读到该变量(保存有以前调用对该变量的改变)
这样,就会有一些有趣的用法,比如递归函数中使用等等


不好意思,看错了,好像有些答非所问,hehe

[ 本帖最后由 ypxing 于 2007-5-2 19:13 编辑 ]
作者: MMMIX    时间: 2007-05-02 19:13
原帖由 ypxing 于 2007-5-2 19:11 发表
速度更快到是没有听说

我的速度更快是针对 static 函数说的。
作者: snow888    时间: 2007-05-02 19:19
原帖由 MMMIX 于 2007-5-2 19:13 发表

我的速度更快是针对 static 函数说的。



这个还真没试过!

根据需要定义吧。
作者: MMMIX    时间: 2007-05-02 19:33
原帖由 snow888 于 2007-5-2 19:19 发表
这个还真没试过!

看来大家都对这个速度更快很感兴趣,遗憾的是这种速度更快只是理论上的,一般情况下你是感觉不到的
作者: cobranail    时间: 2007-05-02 20:00
我想主要作用应该还是防止重名,估计对速度没有多少影响。
我一时秀逗了,没想起来static的这个作用。
作者: wuqing    时间: 2007-05-02 20:54
原帖由 cobranail 于 2007-5-2 19:00 发表
今天在小黑gimp的时候,发现它的函数几乎都是定义成static的。
这样定义有什么好处么?调用速度更快?


可见性也是一方面
作者: namei    时间: 2007-05-02 21:27
改变符号的作用域吧, Google上面查查关于符号作用域的信息看看
作者: JohnBull    时间: 2007-05-02 22:53
一个函数一旦声明成static,函数名就成了局部符号,可以减轻连接器负担




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2