static的来意

当C语言中,static的字面意思分外爱把大家导入歧途,其实它的打算有三条。

4               7

(1)先来介绍其的第一长条为是异常要紧之一模一样长:隐藏。

乃或许相会咨询:为啥在a.c中定义的全局变量a和函数msg能于main.c中采用?前面说过,所有不加static前缀的全局变量和函数都拥有全局可见性,此外的源文件也能访问。此例中,a是全局变量,msg是函数,并且都不曾加static前缀,由此对于此外的源文件main.c是可见的。

(3)static的老两只意是默认起始化为0。其实全局变量也兼具这无异于属性,因为全局变量也蕴藏在静态数据区。在静态数据区,内存中具有的配节默认值都是0x00,某些时段顿时等同特色可以减小程序员的工作量。比如初叶化一个疏散矩阵,咱们好一个一个地管持有因素还置0,然后将非是0之几乎单元素赋值。如果定义成静态的,就节约了千篇一律始置0的操作。再按使拿一个字符数组当字符串来所以,但同时认为每一次在字符数组末尾加’\0’太费劲。如若将字符串定义成静态的,就省了这累,因为这边当就’\0’。不妨做只稍实验验证一下。

    return 0;
}

#include <stdio.h>

下面是a.c的内容

int main(void)
{
    int i;
    static char str[10];

char a = ‘A’; // global variable
void msg() 
{
    printf(“Hello\n”); 
}

C语言,int main(void)
{    
    printf(“global\t\tlocal static\n”);
    for(; count <= 10; ++count)
        printf(“%d\t\t%d\n”, count, fun());    
    
    return 0;
}

int count = 1;

 

integer: 0; string: (begin)(end)

A Hello

 

2               9

末对static的老三长条功用做一样句话总括。首先static的无限要功能是藏身,其次为static变量存放于静态存储区,所以其具备持久性和默认值0。

9               2

 

#include <stdio.h>

5               6

程序的运行结果是:

int a;

3               8

int main(void)
{    
    extern char a;    // extern variable must be declared before use
    printf(“%c “, a);
    (void)msg();
    return 0;
}

10              1

7               4

int fun(void){
    static int count = 10;    // 事实上这赋值语句从来没有履行了
    return count–;
}

程序的周转结果如下

global          local static

次第的运行结果是:

(2)static的老二个意是保持变量内容的持久。存储于静态数据区之变量会超过后刚发轫运行时即做到初叶化,也是绝无仅有的一致次初步化。共有三种变量存储于静态存储区:全局变量和static变量,只不过和全局变量比起来,static可以控制变量的可见范围,说到底static仍然由此来掩藏的。尽管这种用法不普遍,但自我或举一个例子。

内容转自:http://www.cnblogs.com/dc10101/archive/2007/08/22/865556.html

 

    printf(“integer: %d;  string: (begin)%s(end)”, a, str);

1               10

6               5

当大家又编译多单文本时,所有未加static前缀的全局变量和函数都存有全局可见性。为精通这词话,我举例来注解。大家要而编译七只自文件,一个凡a.c,另一个凡main.c。

8               3

下面是main.c的内容

只要加了static,就会师对另源文件隐藏。例如当a和msg的定义前增长static,main.c就看不到它们了。利用这同样特性可在不同的文书中定义和名函数和同名变量,而毋庸担心命名争辨。Static能够就此作函数和变量的前缀,对于函数来讲,static的打算才限于隐藏,而对变量,static还有下边两独成效。