一篇搞懂 C 语言中的 static 和 extern

深入理解C语言static与extern

  C语言里的  static  和  extern  是两个非常重要的关键字,它们主要和变量或函数的作用域、链接属性以及生命周期有关。今天我们就来好好聊聊它们。

 

1. static:"静态"的修饰符

 

 static  这个关键字,你可以把它理解成一个"静态"的开关。它的作用会根据修饰的对象不同而变化,但核心思想是限制访问范围或延长生命周期。

 

修饰局部变量

 

当  static  修饰函数内部的局部变量时,它的主要影响是生命周期。

 

- 普通局部变量:函数每次调用时创建,函数结束后销毁。

- static 局部变量:只在程序运行时初始化一次。

- 即使函数执行结束,它的值也会被保留。

- 下次调用该函数时,变量会接着上次的值继续使用。

 

示例代码:

#include <stdio.h>

 

void counter() {

    static int count = 0; // 只初始化一次

    count++;

    printf("Count: %d\n", count);

}

 

int main() {

    counter(); // 输出 Count: 1

    counter(); // 输出 Count: 2

    counter(); // 输出 Count: 3

    return 0;

}

 

 

修饰全局变量和函数

 

当  static  修饰全局变量或函数时,它的主要影响是作用域。

 

- 普通全局变量/函数:默认是外部链接。

- 只要声明正确,整个项目的其他源文件都可以访问。

- static 全局变量/函数:被限制为内部链接。

- 只能在定义它的那个源文件内部使用。

- 其他源文件无法访问,相当于给它"上锁"。

 

为什么这么做呢?

 

- 防止不同文件中同名的全局变量或函数产生冲突。

- 有效管理代码模块的边界,提升程序的安全性和可维护性。

 

 

 

2. extern:"外部"的声明:

 

 extern  关键字的作用很单纯,就是告诉编译器:"这个变量或函数是在别的文件里定义的,你先别报错,链接的时候再去找它。"

 

它只做声明,不做定义。

 

变量的声明与定义

 

- 定义:给变量分配内存空间,例如  int global_var = 10; 

- 声明:告诉编译器变量的类型和名字,不分配空间

- 例如  extern int global_var; 

 

使用示例:

 

假设你有两个文件  a.c  和  b.c 。

 

a.c (定义变量):

 

int global_var = 10; // 定义并初始化

 

 

b.c (使用变量):

 

#include <stdio.h>

 

extern int global_var; // 声明:告诉编译器变量在别处

 

int main() {

    printf("global_var from a.c: %d\n", global_var); // 正确使用

    return 0;

}

 

 

编译时需要把两个文件一起编译: gcc a.c b.c -o program 

 

注意: extern  也可以用来声明函数,但通常没必要。因为函数声明本身就隐含了  extern  属性。

 

 

 

总的来说, static  是用来"限制"和"延长"的,而  extern  是用来"声明"和"链接"的。

 

这两个关键字是C语言模块化编程的基础,理解它们对于写出规范、健壮的代码非常重要。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值