关键字-extern
- 首先我们知道:
- 全局变量,是可以跨文件,被访问的
- 全局函数,是可以跨文件,被访问的
而跨文件使用需要声明,可以使用关键字extern来声明
注意:声明并不会开辟空间,故变量声明的时候不能设置初始值
- 使用:
- 变量声明必须带上extern
- 函数声明建议带上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; }
关键字-static
static修饰变量
- 修饰全局变量
使该全局变量只能在本文件内被使用
注:影响的是作用域,而不是生命周期
- 修饰局部变量
使变量的生命周期变成全区周期
- 示例:
#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
- 效果
- 修饰全局变量,让全局变量或者函数无法跨文件访问,只能在本文件内部访问
- 修饰局部变量,更改该局部变量的生命周期(生命周期延长,作用域不变)
- 修饰函数,使函数只能在本文件内被访问,不能在其他文件内访问,通过嵌套可以访问
- 作用
用来项目维护,提供安全维护(限制了作用域使其只能在当前文件使用)
是一种面向过程语言的封装工具(类似黑箱子)
- 思考
为什么static修饰局部变量生命周期发生改变了?
本质:修饰后变量存放的位置发生改变,使其生命周期延长
局部变量具有临时性:存放在栈区随着入栈生成,出栈结束
static局部变量:存放在全局数据区,在整个“进程”运行生命周期都是有效的
注意:这个空间 不是内存!!! 是进程地址空间(操作系统)
基本数据类型
- C常见内置类型
- char
- short
- int
- long
- long long
- float
- double
如何看待数据类型
- 定义变量的本质
在内存中开辟一块空间,用来保存数据(目的)
而定义一个变量,是需要类型的,这个是基本语法决定的
- 结论
类型决定了变量开辟空间的大小
不同的类型来满足不同应用场景(便于节省空间)