首页 > 编程笔记

C语言static关键字

在 C语言中,static 关键字有两种不同的作用。一种是用于限制变量和函数的作用域,另一种是用于保留变量的值。

限制作用域

当 static 用于变量时,它表示该变量具有静态生命周期和文件作用域。这意味着该变量在程序运行期间一直存在,直到程序结束,而且只能在定义该变量的源文件中访问。该变量不会被其他源文件所使用。

当 static 用于函数时,它表示该函数具有文件作用域,只能在定义该函数的源文件中使用,不能被其他源文件所调用。

下面是一个使用 static 关键字限制作用域的例子:
// file1.c
#include <stdio.h>

static int count = 0;

void increment(void) {
    count++;
    printf("count: %d\n", count);
}

// file2.c
#include <stdio.h>

void increment(void);

int main(void) {
    increment();  // 输出 count: 1
    increment();  // 输出 count: 2
    increment();  // 输出 count: 3
    return 0;
}
在上面的例子中,count 变量使用 static 关键字定义,它具有文件作用域并且只能在 file1.c 中访问。increment 函数在 file1.c 中定义,它也具有文件作用域,并且只能在 file1.c 中被调用。在 main 函数中,我们通过声明 increment 函数并调用它来访问 count 变量。

保留变量值

当 static 用于变量时,它表示该变量具有静态存储期。这意味着该变量在程序的整个运行期间都存在,而不像自动变量那样在每次函数调用时创建和销毁。该变量只会被初始化一次,然后保留其值,直到程序结束。

下面是一个使用 static 关键字保留变量值的例子:
#include <stdio.h>

int increment() {
    static int count = 0;
    count++;
    return count;
}

int main(void) {
    printf("%d\n", increment());  // 输出 1
    printf("%d\n", increment());  // 输出 2
    printf("%d\n", increment());  // 输出 3
    return 0;
}
在上面的例子中,count 变量使用 static 关键字定义,它在第一次调用 increment 函数时被初始化为 0,并在后续调用中保留其值。每次调用 increment 函数时,count 变量的值增加 1,并返回该值。因此,程序输出 1、2 和 3。

总之,static 关键字在 C语言中具有不同的作用,它可以限制变量和函数的作用域,也可以保留变量的值,我们可以根据具体的使用场景,灵活地使用。

推荐阅读