⭐️ 关键字深度剖析 ⭐️第二章(多文件\数据类型&关键字extern/static)
2023-09-27 14:22:51 时间
目录
前言
本文主要讲解点:
- extern的使用
- 多文件的作用
- static的作用
- 如何看待类型
- 变量的命令规则
- sizeof 的理解
关键字-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
如何看待数据类型
- 定义变量的本质
在内存中开辟一块空间,用来保存数据(目的)而定义一个变量,是需要类型的,这个是基本语法决定的
- 结论
类型决定了变量开辟空间的大小不同的类型来满足不同应用场景(便于节省空间)
相关文章
- 女神节·走近又美又飒的程序媛
- neosemantics (n10s):Neo4j RDF & Semantics toolkit【将ttl/owl/RDF文件导入neo4j】【neo4j3.X版本与neo4j4.X有区别】
- ⭐️ 关键字深度剖析 ⭐️第三章(关键字sizeofsignedunsigned&原反补数据范围)
- 【Android】字节码&ASM-class文件刨析
- A.图机器学习(GML)&图神经网络(GNN)原理和代码实现(前置学习系列二)
- 自动精简配置&重复数据删除核心技术点及其经济效应探究
- CF 559A(Gerald's Hexagon-几何割补法)
- git diff命令输出解释 & git checkout还原文件到特定版本
- 【Python21天学习挑战赛】字典 && 小数据池
- 实战项目:通讯录&nbsp;UI—第十一天
- 【Python & Other】一网打尽 Python复制文本&文件到剪切板
- 【Selenium】Python & Selenium 执行 CDP
- VS2010 打包生成exe文件后 执行安装文件出现 TODO:<文件说明>已停止工作并已关闭
- 【WIN32API&DAPI】窗口相关函数
- Python import常见用法 & 父目录引用子目录py文件 & 子目录引用父目录py文件
- 数据结构与算法 | 【分治策略 || 排列树 & 子集树】——全排列、求子集问题...
- 如何将SVN patch的修改做成old&new文件
- 我的Android进阶之旅------>解决 Error: ShouldNotReachHere() 问题
- Nginx中的root&alias文件路径及索引目录配置详解
- Java语言实现简单FTP软件------>远程文件管理模块的实现(十)
- Java语言实现简单FTP软件------>本地文件管理模块的实现(九)
- 我的Android进阶之旅------>Android中使用HTML作布局文件以及调用Javascript
- 我的Java开发学习之旅------>Java多线程下载文件 实例