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

C语言关键字static的使用详解

初探“static”一点儿C语言记忆碎片程序运行的时候内存就那么几块地方放代码放数据还有没初始化的数据所有人都觉得这些东西很重要程序才能跑起来代码放代码段初始化的数据放data段bss段就放那些还没动过的数据它们都在那里等着等着被使用text段比较特殊它一般是只读的有时候也能写data和bss就不一样了它们是随便读写的。C语言看内存分得更细栈堆全局静态区常量区代码区感觉像把一个东西切成好几块栈是自动的函数调用就用它局部变量也放这儿堆得自己动手申请释放不然就麻烦了全局静态区放全局变量静态变量常量区呢放那些不能改的东西字符串常量就在那儿代码区就是代码待的地方CPU眼里的内存跟C语言看到的不太一样代码段数据段堆栈段这些是CPU关心的C语言呢更关注变量怎么用。要理解变量在哪儿得先看看可执行文件怎么和内存挂钩UNIX系统就做得不错可以看看它怎么把文件变成内存地址这样才能明白程序里的东西到底存在哪儿一开始觉得有点难但慢慢就明白了。全局变量整个项目都能用听着挺方便的可要是名字撞了那可就麻烦了静态全局变量就不一样只能在自己的文件里用别人想用都用不了这样就减少了冲突的可能它们都住在全局数据区但是静态全局变量被限制住了作用域小多了你跨文件访问试试肯定不行编译器会告诉你没门儿。局部变量函数调用的时候才出现函数结束就消失了像一阵风静态局部变量就不一样了程序活着它就活着而且只初始化一次下次再用还是上次的值挺有个性的局部变量住在栈里静态局部变量呢跑到了全局数据区真是个特别的存在函数被多次调用看看局部变量和静态局部变量你就明白它们到底有什么不一样了。还有静态函数前面加个static它的作用范围就被限制在这个文件里了别人想用根本找不到很多人都觉得这个东西特别有用可以避免名字冲突保护函数不被乱用还能创建只能自己用的函数静态函数一直待在内存里不用每次都加载感觉效率高了一点所有人都觉得这样挺好的。你在不同的文件里试试调用静态函数看看编译器怎么说它会告诉你这个函数是私有的别想乱用这东西确实有用能让你写代码的时候更安心不会担心别人乱改或者名字冲突真的是这东西很实用。有个问题挺有意思的如果我想自己写一个函数名字跟库函数一样而且还在自己的函数里用原来的库函数怎么办大家都在想这到底是怎么一回事彭老师讲过你可以去找找他的文章看看他是怎么一步一步解决这个问题的很多人看完这个故事都会去想原来C语言还有这么多好玩的东西真的很有意思这东西确实实用。就比如sprintf, 格式化输出到字符串stdlib.h 里的atoi把字符串变成整数math.h 里的sqrt算平方根string.h 里的strcmp比较字符串time.h 里的time获取当前时间这些函数我们经常用有一天你突发奇想想自己写一个strcmp而且想在你的strcmp里调用系统原来的strcmp这听起来有点疯狂但是这确实可以做到。static 还可以用来定义内部链接的变量和函数这是一种非常有用的技术可以帮助你隐藏实现细节防止命名冲突提高代码的可维护性和可重用性比如在一个C文件中你定义了一个static int count 0那么这个count变量只能在这个文件中使用其他文件无法访问它这就避免了与其他文件中同名变量的冲突同时也隐藏了count变量的实现细节其他文件不需要知道count变量的存在只需要调用这个文件提供的接口即可。再比如在一个C文件中你定义了一个static void helper_function()那么这个helper_function函数只能在这个文件中使用其他文件无法调用它这就避免了与其他文件中同名函数的冲突同时也隐藏了helper_function函数的实现细节其他文件不需要知道helper_function函数的存在只需要调用公开的接口即可这种技术在编写大型程序时非常有用可以帮助你将程序分解成多个小的模块每个模块负责一个特定的功能模块之间通过定义明确的接口进行交互模块内部的实现细节则被隐藏起来这样可以降低程序的复杂性提高代码的可维护性和可重用性。所有人都觉得static 是 C 语言里一个很重要的关键字。可是在那种环境下谁能受得了一直想着内存作用域生存期真的很累但没办法想学好 C 语言就得啃这些东西啃明白了才能写出更牛的代码静态全局变量静态局部变量静态函数这些东西都有自己的特点用对了地方就能发挥很大的作用否则就会给自己挖坑真的是这东西很实用要好好学这东西确实有用能让你写代码的时候更安心不会担心别人乱改或者名字冲突真的很有意思这东西确实实用。C 语言就是这样细节很多但是也很强大只要你用心去学就能掌握它写出高质量的程序记住static 只是 C 语言里的一小部分还有很多东西等着你去探索去学习加油吧少年所有人都觉得你以后肯定会成为一个 C 语言高手。

相关文章:

C语言关键字static的使用详解

初探“static”,一点儿C语言记忆碎片 程序运行的时候,内存就那么几块地方,放代码,放数据,还有没初始化的数据,所有人都觉得这些东西很重要,程序才能跑起来,代码放代码段,…...

大学生HTML期末大作业——HTML+CSS+JavaScript购物商城(美食)

HTMLCSSJS【购物商城】网页设计期末课程大作业 web前端开发技术 web课程设计 网页规划与设计💥 文章目录一、🏁 网站题目二、🚩 网站描述三、🎌 网站介绍四、🏴 网站效果五、🏳️ 网站代码六、&#x1f3f3…...

GT高速口相关知识

一. 1.0:FPGA高速口不需要配置电平标准,但是电平标准是CML 1.1不通系列fpga对高速口的叫法异同——统称GT 1.2外部结构如下:两个ibufds 表示可以同时跑两种接口(pcie,万兆网) 4对rx/tx对1个时钟模块:包含4个cpll1个Qpll(区别GTP…...

工作中的硬核记录

此文档用以记录我在工作中实用的命令,工具与相关知识 # 虚拟机客户机隔离选项开启,从而实现拖放与复制: sudo apt-get update sudo apt-get install open-vm-tools-desktop# 建立管道: # https://jupyter.ihep.ac.cn/YzPmEyvDRSGp…...

死锁(Deadlock)

什么是死锁 死锁是多个进程或线程因竞争资源而陷入相互等待的状态,若无外力干预,所有进程或线程将无法继续执行。例如各进程互相等待对方手里的资源,导致各进程都阻塞,无法向前推进的现象就是死锁。 什么时候产生死锁 互斥条件:在一段时间内某资源只由一个进程或线程占…...

5分钟搞定RT-Thread串口DMA配置:GD32F450硬件加速实战教程

GD32F450串口DMA配置实战:RT-Thread环境下的高效数据传输方案 在嵌入式系统开发中,串口通信是最基础也最常用的外设接口之一。传统的中断方式处理串口数据会占用大量CPU资源,而DMA(直接内存访问)技术则能显著提升系统效…...

get_iplayer代码架构分析:Perl模块化设计与核心功能实现原理

get_iplayer代码架构分析:Perl模块化设计与核心功能实现原理 【免费下载链接】get_iplayer A utility for downloading TV and radio programmes from BBC iPlayer and BBC Sounds 项目地址: https://gitcode.com/gh_mirrors/ge/get_iplayer get_iplayer作为…...

开发者退休计划:软件测试从业者的被动收入构建路径

一、软件测试行业的职业周期挑战当自动化工具与AI测试技术席卷行业,35岁以上的资深测试工程师面临三重结构性压力:技能迭代断层GitHub数据显示,67%团队已采用AI辅助测试脚本生成,传统手工测试需求下降23%。缺乏自动化框架设计&…...

VJEPA2预训练完全指南:利用百万小时视频数据构建世界模型

VJEPA2预训练完全指南:利用百万小时视频数据构建世界模型 【免费下载链接】vjepa2 PyTorch code and models for VJEPA2 self-supervised learning from video. 项目地址: https://gitcode.com/gh_mirrors/vj/vjepa2 VJEPA2是基于PyTorch的自监督视频学习框架…...

AI合规专家:法规GDPR 2.0下的软件测试新使命

一、变革:GDPR 2.0对测试领域的深度重构随着欧盟《通用数据保护条例》升级版(GDPR 2.0)的落地,软件测试从业者正面临角色本质的跃迁。新规在三大维度强化技术约束:算法可解释性强制化:要求AI决策逻辑全程可…...

如何为BilibiliSponsorBlock提交新的片段标注:完整用户指南

如何为BilibiliSponsorBlock提交新的片段标注:完整用户指南 【免费下载链接】BilibiliSponsorBlock 一款跳过小电视视频中恰饭片段的浏览器插件,移植自 SponsorBlock。A browser extension to skip sponsored segments in videos, ported from the Spons…...

10个实用技巧:让你的Gin开发环境更快更稳定

10个实用技巧:让你的Gin开发环境更快更稳定 【免费下载链接】gin Live reload utility for Go web servers 项目地址: https://gitcode.com/gh_mirrors/gin/gin Gin是一款专为Go Web应用打造的实时重载工具,能够显著提升开发效率。本文将分享10个…...

从‘发动机’到‘变速器’:用AUTOSAR OS Alarm与Counter的协作,讲透汽车ECU的定时心跳

从‘发动机’到‘变速器’:用AUTOSAR OS Alarm与Counter的协作,讲透汽车ECU的定时心跳 想象一下驾驶一辆高性能跑车时,发动机的轰鸣与变速器的精准配合——这种机械协同的美感,正是AUTOSAR OS中Counter与Alarm协作的完美隐喻。在汽…...

PHPMD源码解析:揭秘PHP代码质量检测引擎的内部工作原理

PHPMD源码解析:揭秘PHP代码质量检测引擎的内部工作原理 【免费下载链接】phpmd PHPMD is a spin-off project of PHP Depend and aims to be a PHP equivalent of the well known Java tool PMD. PHPMD can be seen as an user friendly frontend application for t…...

终极Duckling部署与优化指南:打造高性能生产环境的完整方案

终极Duckling部署与优化指南:打造高性能生产环境的完整方案 【免费下载链接】duckling Language, engine, and tooling for expressing, testing, and evaluating composable language rules on input strings. 项目地址: https://gitcode.com/gh_mirrors/du/duck…...

Spring Boot 自动装配加载过程的性能分析

Spring Boot 自动装配加载过程的性能分析 Spring Boot 的自动装配(Auto-Configuration)是其核心特性之一,它通过约定优于配置的原则,大幅简化了应用的开发与部署。随着项目规模的扩大,自动装配的加载过程可能成为性能…...

如何在VSCode、Vim和Emacs中配置Tern:提升JavaScript开发效率的完整指南

如何在VSCode、Vim和Emacs中配置Tern:提升JavaScript开发效率的完整指南 【免费下载链接】tern A JavaScript code analyzer for deep, cross-editor language support 项目地址: https://gitcode.com/gh_mirrors/te/tern Tern是一个强大的JavaScript代码分析…...

Java团队必看:为何转型AI应用开发已刻不容缓?

在数字化浪潮席卷全球的今天,AI技术正以前所未有的速度重塑各行各业。对于长期深耕Java领域的技术团队而言,转型AI应用开发不仅是顺应时代潮流的选择,更是保障技术竞争力、满足业务需求的必然之举。本文将从技术趋势、业务需求、开发效率三个…...

如何将AutoTrain Advanced模型部署到阿里云函数计算:Python运行时优化终极指南

如何将AutoTrain Advanced模型部署到阿里云函数计算:Python运行时优化终极指南 【免费下载链接】autotrain-advanced 🤗 AutoTrain Advanced 项目地址: https://gitcode.com/gh_mirrors/au/autotrain-advanced AutoTrain Advanced是一款强大的AI模…...

CarSim与Simulink联合仿真:基于MPC的动态规划路径实现超车换道操作指南与模型说明...

CarSim与Simulink联合仿真,实时检测,动态规划路径,实现超车换道,基于mpc,模型预测控制实现,距离效果见视频 提供carsim参数配置文件,导入即可运行 提供simulink模型文件 提供运行指导视频 提供模…...

FLARE-IDA 性能优化技巧:让逆向工程工作流提速300%的完整指南

FLARE-IDA 性能优化技巧:让逆向工程工作流提速300%的完整指南 【免费下载链接】flare-ida IDA Pro utilities from FLARE team 项目地址: https://gitcode.com/gh_mirrors/fl/flare-ida FLARE-IDA 是由 FLARE 团队开发的 IDA Pro 实用工具集,旨在…...

终极GoTrue性能优化指南:数据库调优、缓存策略与负载均衡实践

终极GoTrue性能优化指南:数据库调优、缓存策略与负载均衡实践 【免费下载链接】gotrue An JWT based API for managing users and issuing JWT tokens. 项目地址: https://gitcode.com/gh_mirrors/go/gotrue GoTrue是一个基于JWT的用户管理和令牌发行API&…...

【PID 控制算法实战】C 语言实现:结构体封装、积分限幅与一阶滤波

PID代码解读 (c语言版本) PID的控制流程根据流程一步步描述代码: PID代码流程 创建变量 typedef struct {float Kp, Ki, Kd;float error,last_error;float integral,max_intergral;float output,max_output; }PID;初始化PID的各类参数 void PID_Init(PID *pid,floa…...

Chart.js项目实战:AI碳足迹追踪监控系统

Chart.js项目实战:AI碳足迹追踪监控系统 【免费下载链接】awesome A curated list of awesome Chart.js resources and libraries 项目地址: https://gitcode.com/GitHub_Trending/awesome/awesome 在当今环保意识日益增强的时代,企业和个人都需要…...

阿里云开发者社区用户服务协议

C语言是一种通用的高级语言,最初是由丹尼斯里奇在贝尔实验室为开发UNIX操作系统而设计的。C语言最开始是于1972年在DEC PDP-11 计算机上被首次实现。 在1978年,布莱恩柯林汉(Brian Kernighan)和丹尼斯里奇(Dennis Ritc…...

脑科学研究必备:用BCT工具箱5步完成fMRI网络分析(附示例数据集)

脑科学研究实战指南:BCT工具箱在fMRI网络分析中的5步高效应用 神经影像数据分析一直是脑科学研究中的核心挑战之一。面对海量的功能磁共振成像(fMRI)数据,研究人员常常需要借助专业工具来提取有意义的网络特征。Brain Connectivity Toolbox(BCT)作为一款…...

解决OpenAI API Key单项目配置中的.env文件加载问题(2023/11/24)

1. 为什么你的OpenAI API Key配置总是失败? 最近在帮几个朋友调试OpenAI API项目时,发现一个高频问题:明明按照官方文档配置了.env文件,代码却死活读不到OPENAI_API_KEY。控制台不断报错提示"api_key client option must be …...

PyQtGraph实战案例:构建实时数据监控仪表盘的终极指南

PyQtGraph实战案例:构建实时数据监控仪表盘的终极指南 【免费下载链接】pyqtgraph Fast data visualization and GUI tools for scientific / engineering applications 项目地址: https://gitcode.com/gh_mirrors/py/pyqtgraph PyQtGraph是一款专为科学和工…...

知识加工:从事实表达到可用知识体系

通过知识抽取和知识融合,系统已经能够从多源数据中识别并整理出大量事实表达。但这些事实表达还不等于真正可用的知识图谱。一个可用的知识图谱,不仅要有事实,还要有较稳定的概念结构、可用的推理能力和可靠的质量保障。为此,还需…...

Ziggo-Device软件构建(On device)教程

Ziggo-Device软件构建:ERRORS-CSDN博客https://blog.csdn.net/Rthan/article/details/160149173?spm1001.2014.3001.5501Ziggo-CaaS-Switch软件配置教程-CSDN博客https://blog.csdn.net/Rthan/article/details/160148026?spm1001.2014.3001.5501Ziggo-CaaS-Switch…...