解密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/24 8:02:01 阅读更多 →
ABAP Cloud 中的 Reuse Services,如何把通用能力沉淀成可复用的企业级服务

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

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

2026/10/25 9:52:19 阅读更多 →
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/25 21:13:53 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/11/9 14:01:10 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/11/9 14:56:39 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/11/10 2:03:25 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/11/10 16:14:15 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/11/10 12:51:50 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/11/9 14:01:11 阅读更多 →

日新闻

周新闻

月新闻