当前位置: 首页 > news >正文

extern和static的作用(有例子)

一、extern

extern的作用

  1. 声明而非定义
    extern告诉编译器某个变量或函数存在于其他地方(通常是另一个源文件),当前只是声明它,而不是定义它(分配内存)。定义只能在一个地方出现,而声明可以多次。
  2. 跨文件共享
    它允许在多个源文件之间共享全局变量或函数,避免重复定义导致的链接错误。

例子:

1、头文件中的extern声明

文件结构:
  • shared.h:头文件,包含extern声明。
  • shared.c:定义全局变量和函数。
  • main.c:使用头文件中的声明。

shared.c(定义)

shared.h(声明)

main.c(使用)

2、源文件中的extern声明

文件结构:
  • file1.c:定义全局变量和函数。
  • file2.c:使用extern声明并访问file1.c中的变量和函数。

file1.c(定义)

file2.c(声明并使用)

二、static

static在全局变量中的作用

  • 链接属性(改变)
    默认全局变量具有外部链接性,而static将其改为内部链接性(internal linkage),限制其作用域为当前源文件,其他文件无法通过extern访问
  • 生命周期(不变)
    从程序开始运行到结束,贯穿整个程序生命周期

static在局部变量中的作用

  • 生命周期(改变)
    贯穿整个程序生命周期,与程序生命周期相同,而不像普通局部变量那样随函数退出而销毁。
  • 作用域(因为是局部变量,所以作用域还是在他自己的函数内部)
    仍然局限于定义它的块(如函数内部),外部无法访问。

例子:分为全局变量使用和局部变量使用

1、全局变量使用static

   一、不使用static情况:

解释
  • globalVar没有static,具有外部链接性
  • file2.c通过extern成功访问并修改了file1.c中的globalVar,两者共享同一变量。

二、使用static情况:

解释
  • globalVar被static修饰,具有内部链接性仅在file1.c中可见
  • file2.c无法通过extern访问,链接器找不到globalVar的定义。

2、局部变量使用static

一、局部变量不使用static

每次调用这个函数,局部变量都会被初始化为零

解释
  • callCount是普通局部变量,存储在栈上。
  • 每次countCalls()调用时,callCount重新分配内存并初始化为0,函数退出后销毁,因此每次输出都是1。

二、局部变量使用static

解释
  • callCount被static修饰,存储在静态数据区。
  • 只在第一次调用时初始化为0,后续调用保留之前的值,因此每次调用递增,实现了计数功能。

相关文章:

  • 【AI绘图模型介绍】Checkpoint / LoRA / VAE / Embeddings 模型是什么?
  • Java:Apache HttpClient中HttpRoute用法的介绍
  • 如何让节卡机器人精准对点?
  • 基于基于eFish-SBC-RK3576工控板的智慧城市边缘网关
  • 3.3 二分查找专题: LeetCode 35. 搜索插入位置
  • 事务隔离级别是?
  • 04 泛型编程
  • AMBA-CHI协议详解(二十四)
  • window.btoa 和 atob 记不住,怎么根据字母意思去理解
  • 错误: 缺少 JavaFX 运行时组件, 需要使用该组件来运行此应用程序
  • 当底层硬盘老旧时,如何限制Linux服务器和Windows服务的IOPS?
  • 苍穹外卖-Spring Task使用的前置条件
  • GROOT N1,英伟达开源的人形机器人模型
  • 【LLMs篇】06:Encoder-Only vs Decoder-Only vs Encoder-Decoder
  • OWASP Top 10 解读:如何构建更安全的应用?
  • 【C++】二叉树和堆的链式结构
  • 阿里云 AI 搜索产品荣获 Elastic Innovation Award 2024
  • MySQL 调优
  • 线性规划的标准形式
  • openpnp - 如果安装面的钣金接触面不平,可以尝试加垫片
  • 铁路上海站迎五一假期客流最高峰,今日预计发送77万人次
  • 神十九都带回了哪些实验样品?果蝇等生命类样品已交付科学家
  • 迪卡侬回应出售中国业务30%股份传闻:始终扎根中国长期发展
  • 海尔智家一季度营收791亿元:净利润增长15%,海外市场收入增超12%
  • 在岸、离岸人民币对美元汇率双双升破7.26关口
  • 澎湃回声|山东莱州、潍坊对“三无”拖拉机产销市场展开调查排查