您的位置:首页 > 其它

C 语言 static 的用法

2015-05-23 08:53 148 查看
当我们同时编译多个文件时,所有未加static前缀的全局变量和函数都具有全局可见性。

  

   一个是a.c,另一个是main.c。

char i = 'B'; / / 全局变量

 void dayin() 

  

      {    

     printf("Hello\n");

      }

nt main(void) {      

   extern char i;    //  i   使要用前要用extern 声明

  printf("%c ", a);    

   (void)dayin();

 

     return 0; 

}

B Hello 

  

所有未加static前缀的全局变量和函数都具有全局可见性,其它的源文件也能访问。

此例中,i是全局变量,dayin是函数,并且都没有加static前缀,因此对于另外的源文件main.c是可见的。

如果加了static,就会对其它源文件隐藏。例如在i和dayin的定义前加上static,main.c就看不到它们了。利用这一特性可以在不同的文件中定义同名函数和同名变量,而不必担心命名冲突。

Static可以用作函数和变量的前缀,对于函数来讲,static的作用仅限于隐藏,

   而对于变量,static还有下面两个作用。

static的第二个作用是保持变量内容的持久。

存储在静态数据区的变

量会在程序刚开始运行时就完成初始化,也是唯一的一次初始化。共有两种变量存储在静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static还是用来隐藏的。

#include <stdio.h>

int fun(void){

    static int count = 10;    // 事实上此赋值语句从来没有执行过,

    return count-

}

int count = 1;

int main(void)

{    

    printf("全局变量\t\t静态局部\n");

    for(; count <= 10; ++count)

        printf("%d\t\t%d\n", count, fun());    

    

    return 0;

}

打印结果  :

全局变量         静态局部

1               10

2               9

3               8

4               7

5               6

6               5

7               4

8               3

9               2

10              1

如果去掉 stctic     local  的打印结果全是10。

static的第三个作用是默认初始化为0;

#include <stdio.h>

int a;

int main(void)

{

    int i;

    static char str[10];//去掉  static  字符串就会有乱码输出

    printf(" 整数 %d;  string: %s", a, str);

    return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: