C语言static关键字用法

本文详细介绍了C语言中`static`关键字的用途,包括在函数中定义局部变量时使变量保持其状态,以及限制全局变量和函数的作用域仅限于当前文件。通过示例展示了`static`修饰的变量如何在多次调用中累加值,而未修饰的全局变量则不会。同时,对比了Java中`static`的全局特性,并指出C语言中`static`的限制性。最后,强调了`extern`关键字在尝试访问`static`全局变量时的使用问题及其导致的编译错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

局部变量

#include "stdio.h"

int myadd(){
    int x = 0;
    static int y = 0;

    x= x +1;
    y = y+1;  // 一直累积

    printf("x=%d , y=%d \n",x,y);

}

测试

int main(){

    myadd();
    myadd();
    myadd();
    myadd();
    myadd();

    return 1;

}

输出

观察y的值
x=1 , y=1
x=1 , y=2
x=1 , y=3
x=1 , y=4
x=1 , y=5

static修饰的函数

static int myaddstatic(){
    return 1;
}

静态函数的作用域仅限于当前文件,不能被其它文件调用,
这个和java有点不同,java只要是公开的静态函数,就可以被其他文件所访问
C语言是没用static修饰的函数,反而可以被其他文件所访问,用static修饰的函数,反而不能被其他文件访问

static修饰变量

a文件定义

static int PAGE_SIZE = 20;

b文件

extern int PAGE_SIZE;

b文件是使用不了PAGE_SIZE的

如果使用,编译的时候,就会报错

CMakeFiles\cdemo.dir/objects.a(mystat1.c.obj):mystat1.c:(.rdata$.refptr.PAGE_SIZE[.refptr.PAGE_SIZE]+0x0): undefined reference to `PAGE_SIZE’

总结

java用static修饰是全局,给其他文件使用的
c用static修饰的全局变量和函数,反而禁止了其他文件的使用

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值