设计一个c语言程序(多源文件),程序中包含局部变量、局部静态变量、全局静态变量、全局变量、函数以及循环结构不允许自己创造新的头文件; 将程序运行结果和编译信息结合在一起,通过运行结果和编译结果的讨论,说明上述不同存储类别的 特性与区别。
时间: 2023-12-10 11:41:52 浏览: 88
深入探讨C语言中局部变量与全局变量在内存中的存放位置
5星 · 资源好评率100%
以下是一个符合要求的C语言程序,分为`main.c`和`variables.c`两个源文件:
`main.c`:
```c
#include <stdio.h>
extern int global_var;
extern int global_static_var;
int main()
{
int local_var = 1;
static int local_static_var = 2;
printf("global_var: %d\n", global_var);
printf("global_static_var: %d\n", global_static_var);
printf("local_var: %d\n", local_var);
printf("local_static_var: %d\n", local_static_var);
for (int i = 0; i < 3; i++)
{
print_variables();
}
return 0;
}
```
`variables.c`:
```c
#include <stdio.h>
int global_var = 3;
static int global_static_var = 4;
void print_variables()
{
int local_var = 5;
static int local_static_var = 6;
printf("global_var: %d\n", global_var);
printf("global_static_var: %d\n", global_static_var);
printf("local_var: %d\n", local_var);
printf("local_static_var: %d\n", local_static_var);
global_var++;
global_static_var++;
local_var++;
local_static_var++;
}
```
程序中包含:
- 局部变量:`main.c`中的`local_var`和`variables.c`中的`local_var`
- 局部静态变量:`main.c`中的`local_static_var`和`variables.c`中的`local_static_var`
- 全局静态变量:`variables.c`中的`global_static_var`
- 全局变量:`variables.c`中的`global_var`
- 函数:`variables.c`中的`print_variables()`
- 循环结构:`main.c`中的for循环
运行结果:
```
global_var: 3
global_static_var: 4
local_var: 1
local_static_var: 2
global_var: 4
global_static_var: 5
local_var: 1
local_static_var: 3
global_var: 5
global_static_var: 6
local_var: 1
local_static_var: 4
```
编译信息:
```
$ gcc -o main main.c variables.c
```
通过运行结果和编译信息的讨论,可以得出以下结论:
- 局部变量只在其所在的函数内部可见,每次函数调用都会重新创建一个新的变量。
- 局部静态变量在函数内部只初始化一次,其作用域与局部变量相同,但其生命周期与全局变量相同,即在程序运行期间一直存在,每次函数调用都维持其上一次的值。
- 全局静态变量作用域与全局变量相同,但其只能在定义它的源文件中访问,其他源文件无法访问该变量。
- 全局变量可以被程序中的任何函数访问,其生命周期与程序的运行周期相同。
- 函数可以在程序中被多次调用,每次调用都创建一个新的函数栈帧,该函数栈帧中的局部变量和局部静态变量都是独立的,不会相互影响。
- 循环结构可以重复执行一段代码,可以用于多次调用函数,每次调用都会创建一个新的函数栈帧和局部变量。
阅读全文