前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >⭐️ 关键字深度剖析 ⭐️第二章(多文件\数据类型&关键字extern/static)

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

作者头像
用户9645905
发布2022-11-30 08:01:44
2350
发布2022-11-30 08:01:44
举报
文章被收录于专栏:Linux学习~

目录

前言

关键字-extern

多文件

关键字-static

static修饰变量

static修饰函数

总结-static

基本数据类型

如何看待数据类型


前言


本文主要讲解点:

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

关键字-extern


  • 首先我们知道:
  1. 全局变量,是可以跨文件,被访问的
  2. 全局函数,是可以跨文件,被访问的

而跨文件使用需要声明,可以使用关键字extern来声明

注意:声明并不会开辟空间,故变量声明的时候不能设置初始值

  • 使用:
  1. 变量声明必须带上extern
  2. 函数声明建议带上extern

多文件


单纯使用源文件,组织项目结构的时候,项目越大会越复杂,而维修的成本会越来越高,这时候我们需要建立头文件来减少维护成本

  • 定义
代码语言:javascript
复制
//.h:我们称之为头文件,一般包含函数声明,变量声明,宏定义,头文件等内容(header) 
//.c: 我们称之为源文件,一般包含函数实现,变量定义等 
  • 问题

头文件被多个源文件包含,可能涉及重复包含的问题

  •  解决方案
代码语言:javascript
复制
//test.h
#pragma once //防止头文件被重复包含,当前只需要记住,后面会无数次用

#include <stdio.h>
#include <windows.h>
代码语言:javascript
复制
//test.c
#include "test.h" //""包含头文件,目前只需要知道是自己写的头文件,就用""包含即可
代码语言:javascript
复制
//main.c
#include "test.h" //同上

int main()
{
    printf("hello files!\n");
    return 0;
}

关键字-static


static修饰变量

  • 修饰全局变量

使该全局变量只能在本文件内被使用

注:影响的是作用域,而不是生命周期

  • 修饰局部变量

使变量的生命周期变成全区周期

  • 示例:
代码语言:javascript
复制
#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

如何看待数据类型

  • 定义变量的本质

在内存中开辟一块空间,用来保存数据(目的) 而定义一个变量,是需要类型的,这个是基本语法决定的

  • 结论

类型决定了变量开辟空间的大小 不同的类型来满足不同应用场景(便于节省空间)

第三章传送门:⭐️ 关键字深度剖析 ⭐️第三章(关键字sizeof\signed\unsigned&原反补\数据范围)

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021-07-24,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 前言
  • 关键字-extern
  • 多文件
  • 关键字-static
    • static修饰变量
      • static修饰函数
        • 总结-static
        • 基本数据类型
          • 如何看待数据类型
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档