荔园在线

荔园之美,在春之萌芽,在夏之绽放,在秋之收获,在冬之沉淀

[回到开始] [上一篇][下一篇]


发信人: jjksam (fight the future), 信区: Program
标  题: Re: 在C中的static函数有什么特别作用?
发信站: 荔园晨风BBS站 (Tue Apr 29 18:34:11 2003), 站内信件

用在函数声明的时候, static表明该函数只能在本文件中使用.
可以避免链接的时候出现名字冲突.

例如你写了一个函数, 并声明为static, 那这个就只能在本文件中生效.

如果你想在一个程序的一个源文件中声明一个函数,这个函数只是在本文件中使用, 那你
就可以把他声明为static,避免在链接的时候出现名字冲突.

例子如下:
-----------------------------------------------------------
下面的例子一共有5个文件,分别为:
-----------------------------------------------------------
c源文件: static_main.c static.c static1.c
头文件:  static.h static1.h
编译命令:
gcc -c static.c static1.c static_main.c
gcc -o static_main static.o static1.o static_main.o
-----------------------------------------------------------
static.h:
-----------------------------------------------------------
#ifndef STATIC_H_
// function declaration
static void static_test();
void in_static_test();
#endif
-----------------------------------------------------------
static.c:
-----------------------------------------------------------
#include <stdio.h>
#include "static.h"
static void static_test()
{
        printf("in static_test!\n");
}
void in_static_test()
{
        static_test();
}

-----------------------------------------------------------
static1.h:
-----------------------------------------------------------
#ifndef STATIC1_H_
void static_test();
#endif
-----------------------------------------------------------
static1.c
------------------------------------------------------------
#include <stdio.h>
#include "static1.h"
void static_test()
{
        printf("in static test 1\n");
}
------------------------------------------------------------
static_main.c:
------------------------------------------------------------
#include <stdio.h>
#include "static.h"
extern void static_test();
int main()
{
        static_test();
        in_static_test();
        return 0;
}

如果把static 那个声明去掉的话,链接的时候就会出现下面的错误:

$ gcc -c static.c static1.c static_main.c
这个不会出错.
但是链接时
$ gcc -o static_main static.o static1.o
static_main.o
static1.o: In function `static_test':
static1.o(.text+0x0): multiple definition of `static_test'
static.o(.text+0x0): first defined here

出错了!



【 在 cycker (TryToDoEverythingOnLinux) 的大作中提到: 】
: 比起没加static的函数来..


--
      ξ
      █D

 Would you like to have a cup of tea with me?

※ 修改:·jjksam 於 Apr 29 18:35:10 修改本文·[FROM: 192.168.0.234]
※ 来源:·荔园晨风BBS站 bbs.szu.edu.cn·[FROM: 192.168.0.234]


[回到开始] [上一篇][下一篇]

荔园在线首页 友情链接:深圳大学 深大招生 荔园晨风BBS S-Term软件 网络书店