C语言static 关键字有什么作??

一、问题

        static 关键字经常被使?,那么它的含义是什么?有哪些作?呢?

二、解答

在 C 语言中, static  关键字有以下几个主要含义和作用

        1、静态局部变量

        使用  static  修饰的变量被称为静态变量。静态变量在函数内部定义,但其生命周期跨越函数的调用。即使函数返回,静态变量的值仍然保留。静态变量只在声明它的函数内部可见。

void func() {
    static int count = 0; // 静态局部变量
    count++;
    printf("函数被调用了 %d 次
", count);
}

int main() {
    func();
    func();
    func();
    return 0;
}
'count'是一个静态局部变量。每次调用 'func()' 函数时,它的值不会重置,而是累加。所以即使
函数执行结束,下一次调用时仍能记住上次的结果。

        2、静态全局变量

        使用  static  修饰的函数被称为静态函数。静态函数与普通函数的区别在于,它只能在声明它的文件中被调用,而不能在其他文件中被使用。这有助于实现函数的隐藏和模块的封装。

// file1.c
static int secret_count = 0; // 静态全局变量

void increment_secret() 
{
    secret_count++;
}

// file2.c
// 尝试访问 secret_count,但无法访问,因为它在 file1.c 中是静态声明的

        3、静态函数

        使用  static  修饰的数组被称为静态数组。静态数组与普通数组的区别在于,它在程序的整个执行期间都存在,并且其大小是固定的。

// helper.c
static void helperFunction() 
{ // 静态函数
    printf("我是辅助函数,只在这个文件内部可见和使用。
");
}

void publicFunction() 
{
    helperFunction(); // 可以在本文件内部调用静态函数
}

// main.c
// 尝试直接调用 helperFunction,但无法访问,因为它在 helper.c 中是静态声明的

        4、文件作用域

        当  static  用于变量或函数声明时,它们具有文件作用域,即只能在当前文件中访问,而其他文件无法访问。
 

三、总结

       总结来说,在C语言中,`static`关键字使得局部变量在函数调用间保持其值不被销毁;使得全局变量的作用域限制在当前编译单元内,避免了命名冲突;以及隐藏函数使其只能在定义它的源文件内可见和使用。