Goforyouqp  

在C语言中,static有以下几种用法:

1. 修饰变量:被static修饰的全局变量具有静态存储期,即从定义开始到程序结束都存在,但作用域仅限于当前文件(即不能被其他文件访问),可以避免不同文件中同名变量的命名冲突。被static修饰的局部变量具有静态生存期,即变量一直存在,而不是随着函数的调用结束而销毁,但作用域仅限于当前代码块。

//static关键字修饰全局变量
#include <stdio.h>

static int count = 0; //定义静态变量

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

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

extern void increment(); //声明increment函数

int main()
{
    increment(); //输出count is 1
    increment(); //输出count is 2
    increment(); //输出count is 3
    return 0;
}

在该例子中,我们定义了一个静态变量count,该变量只能在file1.c文件内使用,无法在其他文件中访问。每次调用increment()函数时,count的值会自增并打印输出。

//static关键字修饰局部变量
#include <stdio.h>

int main()
{
    for (int i = 0; i < 3; i++)
    {
        static int j = 0;
        j++;
        printf("i = %d, j = %d\n", i, j);
    }
    return 0;
}

在该例子中,我们定义了一个静态变量j,在每次循环时j的值会累加,并打印输出。由于j被定义为静态变量,所以其生命周期会持续到程序退出,每次循环都使用相同的变量j,而不是像非静态变量一样每次都创建一个新对象。

2. 修饰函数:被static修饰的函数具有静态链接属性,即只能在定义它的文件中访问。静态函数不会被其他文件所用,也就是它只能被本文件中的函数调用。

#include <stdio.h>

static void print()
{
    printf("Hello, World!\n");
}

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

extern void print(); //声明print函数

int main()
{
    print(); //这里可以访问print函数
    return 0;
}

3. 静态断言:是一个编译错误,用于在编译期间检查某个条件是否为真。

总之,在C语言中,static主要用于控制变量和函数的作用域和链接属性。

posted on 2023-06-20 20:33  嵌入式小白-小黑  阅读(105)  评论(0编辑  收藏  举报  来源