目录
本文主要讲解点:
而跨文件使用需要声明,可以使用关键字extern来声明
注意:声明并不会开辟空间,故变量声明的时候不能设置初始值
单纯使用源文件,组织项目结构的时候,项目越大会越复杂,而维修的成本会越来越高,这时候我们需要建立头文件来减少维护成本
//.h:我们称之为头文件,一般包含函数声明,变量声明,宏定义,头文件等内容(header)
//.c: 我们称之为源文件,一般包含函数实现,变量定义等
头文件被多个源文件包含,可能涉及重复包含的问题
//test.h
#pragma once //防止头文件被重复包含,当前只需要记住,后面会无数次用
#include <stdio.h>
#include <windows.h>
//test.c
#include "test.h" //""包含头文件,目前只需要知道是自己写的头文件,就用""包含即可
//main.c
#include "test.h" //同上
int main()
{
printf("hello files!\n");
return 0;
}
使该全局变量只能在本文件内被使用
注:影响的是作用域,而不是生命周期
使变量的生命周期变成全区周期
#include<stdio.h>
int fun1()
{
int i = 0;
i++;
return i;
}
int fun2()
{
static int i = 0;
i++;
return i;
}
int main()
{
int x,y;
for (int i = 0; i < 10; i++)
{
x=fun1();
y=fun2();
}
printf("no static: i=%d\n", x);
printf("has static: i=%d\n", y);
return 0;
}
使该函数只能在本文件使用
注意:都是不能直接访问,但是可以通过嵌套对外部进行间接使用
用来项目维护,提供安全维护( 限制了作用域使其只能在当前文件使用) 是一种面向过程语言的封装工具(类似黑箱子)
为什么static修饰局部变量生命周期发生改变了?
本质:修饰后变量存放的位置发生改变,使其生命周期延长 局部变量具有临时性:存放在栈区随着入栈生成,出栈结束 static局部变量:存放在全局数据区,在整个“进程”运行生命周期都是有效的
注意:这个空间 不是内存!!! 是进程地址空间(操作系统)
在内存中开辟一块空间,用来保存数据(目的) 而定义一个变量,是需要类型的,这个是基本语法决定的
类型决定了变量开辟空间的大小 不同的类型来满足不同应用场景(便于节省空间)