zl程序教程

您现在的位置是:首页 >  其他

当前栏目

⭐️ 关键字深度剖析 ⭐️第二章(多文件\数据类型&关键字extern/static)

amp文件 深度 数据类型 关键字 剖析 static 第二章
2023-09-27 14:22:51 时间

目录

前言

关键字-extern

多文件

关键字-static

static修饰变量

static修饰函数

总结-static

基本数据类型

如何看待数据类型


前言


本文主要讲解点:

  • extern的使用
  • 多文件的作用
  • static的作用
  • 如何看待类型
  • 变量的命令规则
  • sizeof 的理解

关键字-extern


  • 首先我们知道:
  1.  全局变量,是可以跨文件,被访问的
  2.  全局函数,是可以跨文件,被访问的
而跨文件使用需要声明,可以使用关键字extern来声明
注意:声明并不会开辟空间,故变量声明的时候不能设置初始值
  • 使用:
  1. 变量声明必须带上extern
  2. 函数声明建议带上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

  • 效果
  1. 修饰全局变量,让全局变量或者函数无法跨文件访问,只能在本文件内部访问
  2. 修饰局部变量,更改该局部变量的生命周期(生命周期延长,作用域不变)
  3. 修饰函数,使函数只能在本文件内被访问,不能在其他文件内访问,通过嵌套可以访问
  • 作用
用来项目维护,提供安全维护( 限制了作用域使其只能在当前文件使用)
是一种面向过程语言的封装工具(类似黑箱子)
  • 思考

为什么static修饰局部变量生命周期发生改变了?

本质:修饰后变量存放的位置发生改变,使其生命周期延长
局部变量具有临时性:存放在栈区随着入栈生成,出栈结束
static局部变量:存放在全局数据区,在整个“进程”运行生命周期都是有效的
注意:这个空间 不是内存!!! 是进程地址空间(操作系统)

基本数据类型


  • C常见内置类型
  1. char
  2. short
  3. int
  4. long
  5. long long
  6. float
  7. double

如何看待数据类型

  • 定义变量的本质
在内存中开辟一块空间,用来保存数据(目的)
而定义一个变量,是需要类型的,这个是基本语法决定的
  • 结论
类型决定了变量开辟空间的大小
不同的类型来满足不同应用场景(便于节省空间)