|
发表于 2024-7-17 11:15:38
|
显示全部楼层
本帖最后由 行客 于 2024-7-17 11:17 编辑
通过示例来说明static和extern的使用和差异是能帮助理解的。以下是一个简单的C语言示例,展示如何使用这两个关键字以及它们的效果:
文件1: common.h (头文件)
- #ifndef COMMON_H
- #define COMMON_H
- // 声明extern变量
- extern int extern_var;
- #endif // COMMON_H
复制代码
文件2: global_defs.c (实现文件)
- #include "common.h"
- // 定义extern变量
- int extern_var = 10;
复制代码
文件3: main.c (主文件)
- #include <stdio.h>
- #include "common.h"
- // 使用static变量的例子
- static int static_var = 5;
- int main() {
- // 使用extern变量
- printf("extern_var in main.c: %d\n", extern_var);
-
- // 修改extern变量
- extern_var += 10;
-
- // 调用函数,修改static变量并打印
- modifyStaticVar();
- printf("static_var in main.c after function call: %d\n", static_var);
- return 0;
- }
- void modifyStaticVar() {
- // 函数内部的static变量
- static int static_func_var = 0;
-
- // 每次调用函数时,static_func_var都会增加
- static_func_var++;
- printf("static_func_var in function: %d\n", static_func_var);
-
- // 修改外部static变量
- static_var += 10;
- }
复制代码
在这个示例中:
1. extern变量 (extern_var) 是在
global_defs.c
中定义的,并且在
main.c
中通过
extern
关键字声明。这样,
main.c
就可以访问和修改
extern_var
的值,即使它没有在
main.c
中定义。
2. static变量 (
static_var
) 在
main.c
中声明和定义。尽管它是在文件级声明的,但由于
static
关键字,它只能在
main.c
中访问。
modifyStaticVar
函数可以修改
main.c
中的
static_var
,这是因为
static_var
的范围限制在了
main.c
文件内部。
3. 函数内的static变量 (
static_func_var
) 在每次调用
modifyStaticVar
时都会增加。这是因为函数内的
static
变量在整个程序的生命周期中保持其值,即使函数调用结束,它的值也不会丢失。
通过这个示例,我们可以看到
static
和
extern
关键字是如何控制变量的作用域和存储期的,以及它们在多文件项目中的具体应用。 |
|