解密C语言:static静态与extern外部声明
一extern外部声明extern 是 C/C 语言中的存储类说明符storage class specifier用于声明一个变量或函数是在其他文件中定义或者声明其具有外部链接性external linkage。简单来说extern 告诉编译器「这个符号在别处已经定义过了你只需要知道它的存在即可」从而允许在多个源文件之间共享全局变量和函数。1. extern 的核心作用跨文件共享全局变量在一个源文件中定义全局变量在其他源文件中用 extern 声明后即可访问。声明函数的外部链接性函数默认就具有外部链接性但显式使用 extern 可以增强代码可读性。配合 const 使用在 C 中const 变量默认具有内部链接性需要加 extern 才能跨文件共享。2. 基本语法extern是用来声明来自外部的符号extern变量类型 变量名extern函数返回类型 函数名(形参类型)//可不写形参名//在使用调用前声明3.实例test_1.cintt10;voidpt(intt){printf(%d,t);}test_2.c / test.hexterninttexternvoidpt(intt);4. 使用注意事项extern 只是声明不会分配存储空间真正的定义只能出现一次。声明与定义的类型必须一致否则会产生未定义行为。在头文件中使用 extern 声明变量时不要同时赋初值否则会变成定义。函数声明默认自带extern不用再在前加extern。用extern修饰函数的情况常用在函数未在.h中声明的情况下函数具有外部链接属性所以未在.h中声明也可在不同源文件中使用【会出现警告但强行用也能用】但若在.h中声明了最好使用头文件解决声明问题——更简便二static静态static 是 C/C 语言中的存储类说明符storage class specifier用于控制变量或函数的作用域与生命周期。与 extern 的「跨文件共享」相反static 的核心作用是「限制可见范围」它让变量或函数只在当前文件或当前函数内有效同时改变变量的存储期。1. static 的核心作用限制作用域修饰全局变量或函数时使其只在当前源文件内可见其他文件无法通过 extern 引用。延长局部变量生命周期修饰函数内的局部变量时变量在程序运行期间只初始化一次函数退出后仍保留其值。限定函数内部可见性修饰函数时该函数只能在本文件中调用不能被其他文件访问。2.用法分类static修饰修饰局部变量修饰全局变量修饰函数3.修饰局部变量在局部变量创建时的变量类型前加static该代码在执行时不会执行使该变量在出函数时不会被销毁下次进入该函数时仍然存在且是上一次出函数的值。#includestdio.hvoidtest(){staticintt0;// 只初始化一次t;printf(%d ,t);}intmain(){test();// 第 1 次调用打印1test();// 第 2 次调用打印2test();// 第 3 次调用打印3return0;}//结果1 2 3static修饰局部变量后改变了变量生命周期本质存储类型改变了。变量无static栈区局部变量函数参数有static静态区全局变量静态变量生命周期变为和程序周期一样了只有程序结束后才会被销毁。作用域不变只能在该函数内使用。4.修饰全局变量在不同源文件中全局变量不能跨文件使用编译器对文件单独从上到下编译故编译不同源文件时不能识别不同文件的全局变量要使用的话需extern声明。但若全局变量被static修饰就无法跨文件使用static表示其只是该文件内部使用的使其只能在本源文件中使用作用域变小。本质原因是全局变量默认是具有外部链接属性的在外部文件中使用时只需适当声明即可但全局变量被static修饰后外部链接属性就变成了内部链接属性只能在自己所在的源文件内部使用其他源文件即使声明也无法正常使用。使用建议如果一个全局变量只想在所在的源文件内部使用不想被其他文件使用就可以使用static修饰。5.修饰函数static修饰函数和全局变量同理若只想在定义该函数的文件中使用可用static放在函数创建时的函数返回值类型前。本质是因为默认函数有外部链接属性使函数在整个工程中只要适当声明就可使用但static修饰后就变成了内部链接属性使函数只能在自己所在的源文件中使用。使用建议一个函数只想爱所在源文件内部使用不想被其他源文件使用就可以用static修饰不想让别人使用 / 与别人的代码发生冲突

相关新闻

ARR还是交付量,物理AI 国产 的三种收入口径

ARR还是交付量,物理AI 国产 的三种收入口径

【具身AGI导读】同一家公司,换一种口径,就能讲出三个完全不同的进度。行业第一次公开吵起来的,恰恰是「收入」这两个字本身。2026 年 9 月,具身智能行业内部围绕「收入怎么算」出现了一场公开争执。一方质疑同行的收入口径&#x…

2026/10/3 13:56:12 阅读更多 →
ABAP Cloud 中的 Reuse Services,如何把通用能力沉淀成可复用的企业级服务

ABAP Cloud 中的 Reuse Services,如何把通用能力沉淀成可复用的企业级服务

在一个真正投入生产的 SAP 业务应用里,开发工作很少只是维护几张业务表、写几个 CDS View、实现一个 RAP Business Object,再通过 OData V4 暴露出去这么简单。销售订单修改以后要留下审计记录,后台批处理需要能够调度,业务异常需要写入统一日志,审批需要进入工作流,业务…

2026/10/3 13:56:12 阅读更多 →
JS/TS电子表格引擎:SheetJS、ExcelJS、Hucre

JS/TS电子表格引擎:SheetJS、ExcelJS、Hucre

SheetJS 英文官网,中文官网,开源(GitHub,36.4K Star,7.9K Fork)。 GitHub已不再维护,查看源码新地址:https://git.sheetjs.com/SheetJS/sheetjs 中文文档。 ExcelJS 开源&#…

2026/10/3 13:56:12 阅读更多 →

最新新闻

智能体长期记忆实战:从hindsight事后复盘到MCP与Docker落地

智能体长期记忆实战:从hindsight事后复盘到MCP与Docker落地

1. 从"hindsight"这个词说起:为什么它值得单独拿出来聊 第一次看到"hindsight"作为项目名,我脑子里蹦出来的不是技术,而是一句老话——事后诸葛亮。但恰恰是这个"事后"的视角,在当下的智能体&#…

2026/10/3 14:29:53 阅读更多 →
Hindsight 实战:让 Agent 记忆从存到评,少走弯路的工程指南

Hindsight 实战:让 Agent 记忆从存到评,少走弯路的工程指南

1. 从“hindsight”这个词说起:为什么它值得单独拿出来聊“hindsight”直译过来是“后见之明”,但放在当下 LLM 与 Agent 的技术语境里,它指向的东西要具体得多:让 Agent 在任务执行完之后,回过头去复盘自己走过的路径…

2026/10/3 14:29:53 阅读更多 →
从零手搓AI工程:推理服务化与显存管理实战

从零手搓AI工程:推理服务化与显存管理实战

1. 从零手搓AI工程:为什么我不建议你直接调包很多人一听到“AI工程”这四个字,第一反应就是打开某个云平台,拖几个组件,调几个API,然后跑通一个Demo,就觉得自己已经入门了。我刚开始接触这个方向的时候也是…

2026/10/3 14:29:53 阅读更多 →
Delphi 12.3 集成 DISQLite3 v5.48.3 实战指南

Delphi 12.3 集成 DISQLite3 v5.48.3 实战指南

简介:本资源是面向Delphi中高级开发者的一套SQLite数据库集成控件包,专为Delphi 11–12 Athens版本适配,解决原生SQLite在Delphi项目中封装复杂、调用繁琐、跨平台支持弱等实际开发痛点。压缩包共169个文件,含51个Pascal源码&…

2026/10/3 14:29:53 阅读更多 →
ZYNQ PS端I2C驱动OV5640全链路调试指南

ZYNQ PS端I2C驱动OV5640全链路调试指南

1. 为什么在ZYNQ上跑OV5640不能只靠“抄驱动”——PS端I2C摄像头的底层逻辑陷阱ZYNQ Linux环境下PS端I2C驱动OV5640,这行字背后藏着太多人踩过的坑:烧写完image.ub进SD卡,串口打印一堆i2c-core: driver [ov5640] registered,可/de…

2026/10/3 14:29:53 阅读更多 →
MySQL事务从原理到实践:ACID、隔离级别与锁机制全解析

MySQL事务从原理到实践:ACID、隔离级别与锁机制全解析

最近在技术社区经常看到有人把事务挂在嘴边,但真要落到实际操作和原理层面,能讲清楚的人不多。我一直在业务一线写SQL、调性能,和事务打了多年交道,今天就把MySQL里事务的操作和四大特性彻底拆开聊一聊。这篇文章既适合刚接触数据…

2026/10/3 14:28:52 阅读更多 →

日新闻

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南

把回忆蒸馏成 AI 的浪漫实验:为什么你需要前任.skill 完整指南 【免费下载链接】ex-skill 前任 skill 项目地址: https://gitcode.com/gh_mirrors/exsk/ex-skill 前任.skill 是一个运行在 Claude Code 上的开源 Skill:导入微信、iMessage、短信、…

2026/10/3 0:00:27 阅读更多 →
45个经典Linux面试题:从命令到网络排障的完整考点解析

45个经典Linux面试题:从命令到网络排障的完整考点解析

刚开始带应届生的时候,我最头疼的就是他们拿着一摞Linux面试题背得滚瓜烂熟,一上机全露馅。后来自己从被面的人变成面别人的人,才慢慢摸清楚:Linux面试题考的根本不是答案本身,而是你面对一个不确定的系统问题时&#…

2026/10/3 0:01:28 阅读更多 →
SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

SAP生产预留实战指南:MB21/MB23/MB25协同与MRP集成

简介:本资源是一份面向SAP ABAP开发人员、生产计划专员及ERP实施顾问的实操型操作指南,聚焦SAP生产预留核心业务场景,系统解决物料预留创建、查询、校验与批量处理等高频问题。文档以结构化方式覆盖预留背景原理、OMC2编码规则、工厂级参数配…

2026/10/3 0:01:28 阅读更多 →

周新闻

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解

如何划分训练/验证集:Spirula Studio五种eval_mode策略详解 【免费下载链接】spirula-studio Cross-vendor 3D Gaussian Splatting trainer - video to splat to mesh, Vulkan or CUDA. 项目地址: https://gitcode.com/GitHub_Trending/sp/spirula-studio Sp…

2026/10/3 9:14:33 阅读更多 →
SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南

SEO怎么推广速查手册新手避坑实战指南 模板网站太丑不够用?别急着加滤镜,那是治标不治本。很多老板盯着后台流量掉得眼红,却还在纠结首页Banner的圆角是不是3像素。这就像穿着西装去挖土,姿势不对,努力白费。我整理这份 速查手册…

2026/10/3 9:47:50 阅读更多 →
FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏

FireRed-OpenStoryline少样本仿写深度解析:AI Agent如何复刻你的独特文案风格与节奏 【免费下载链接】FireRed-OpenStoryline FireRed-OpenStoryline is an AI video editing agent that transforms manual editing into intention-driven directing through natural language …

2026/10/3 9:42:31 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/2 10:36:31 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:35 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/3 9:42:36 阅读更多 →