本帖最后由 行客 于 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
关键字是如何控制变量的作用域和存储期的,以及它们在多文件项目中的具体应用。 |