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

C语言释疑3:声明Declaration与定义Definition

要弄懂这两者其实没啥大的困难。可是至少有半数以上的C书没能分清。有的书在某一章节里把这个问题说清楚了可在其它章节里却乱说一气。真是无奈。这两者都是对实体Object的操作。对于任何一个实体Definition必须有一次也只能有一次。Declaration可以有0次也可以有任意次。Definition是真正产生实体即为其分配存储空间。Declaration并不产生实体事实上被Declaration的实体必须是已经存在的。譬如在源文件A里定义了一个外部的即在任一函数外面的整数数组int iArray;编译器为其分配了空间譬如400Bytes。如果你希望另一个源文件B里也能访问这个数组你必须在文件B的头部对其做外部声明extern int iArray;这是《C专家编程》里给出的例子。这例子举得好。你可能已经注意到声明里少了100。书里说了由于并未在声明中为数组分配内存所以并不需要提供关于数组长度的信息。这种说法容易引起误解。或者可以换一种说法这里没有生成数组iArray只是声明它已经在另一源文件里定义了这里只不过是声明它是外部的所以无需也不能声明它的元素数。这问题太简单了。你只需记住对每个实体定义数必须是1声明数是0-N。如果你的代码不是这样那就有Bugs。或者出错不能运行或者得到的不是你预想的结果。我以为从结构化观点看extern声明无非是把该数组的作用域从文件A扩展到文件B而已。还有一种声明更为常见就是结构、联合等的声明。与上述的不一样。许多书里说的是结构、联合的定义我说的是声明。仍然是C专家编程里的例子。struct veg { int weight, price_per_lb; };struct veg onion, radish, turnip;第一句声明了一个名为veg的结构类型里面含两个int型成员。第二句定义了三个veg类型的结构变量。我说是声明按上面的说法是不分配空间。在这里这么说恐怕会有点问题。不分配空间也就是说第一个语句不编译出任何代码。对于上面的两个语句这样说能解释得通。但是如果我在声明了结构类型后想动态而不是静态生成结构变量那在运行时如何按这不存在的东西去生成实体呢我没看过含结构类型声明的源代码编译后的目的码不知道里面有没有与结构类型声明相关的代码。我猜想这段代码是肯定有的。只是它不是用来运行的而是用来复制的。你可以把它叫做模板用来生成实体的模板。运行代码和模板代码可能放在不同的地方。这个仅仅是猜想而已。曾几次把这猜想写在BBS上很可惜没人反对。因为没人反对也就没法得到验证。可以把结构类型的声明和结构变量的定义写在一起struct veg { int weight, price_per_lb; } onion, radish, turnip;在这种格式中类型veg可以省略。但是不省略的好处是你可以在以后再按veg定义第四、第五个结构变量。《C专家编程》里说得很好结构类型的声明和结构变量的定义还是分开写好。这篇文章我原先是2006年6月6日发表在CSDN上的署名是beepbug。这里做了一些修改。原文链接https://blog.csdn.net/beepbug/article/details/776063这篇内容同样适用于C。在C里只能说“声明一个类”不能说“定义一个类”。类不是实体代码装入内存时操作系统并不为它分配空间。以某类为样板可以生成若干个对象这才是定义。代码装入内存时操作系统为对象分配空间。

相关文章:

C语言释疑3:声明Declaration与定义Definition

要弄懂这两者,其实没啥大的困难。可是,至少有半数以上的C书没能分清。有的书在某一章节里把这个问题说清楚了,可在其它章节里却乱说一气。真是无奈。 这两者都是对实体Object的操作。 对于任何一个实体,Definition必须有一次&…...

s2-pro参数调优实战:Max New Tokens提升长文本连贯性详解

s2-pro参数调优实战:Max New Tokens提升长文本连贯性详解 1. 引言 s2-pro作为Fish Audio开源的专业级语音合成模型镜像,在文本转语音领域展现出强大的能力。它不仅支持基础的文本转语音功能,还能通过参考音频实现音色复用,为语音…...

西门子PLC控制的组合式空调设备程序架构解析:恒温恒湿PID精准控制与触摸屏交互操作

组合式空调设备PLC程序,采用西门子1200PLC485通讯触摸屏TP系列电气原理图组成的,程序架构清晰; 恒温恒湿PID精准控制,带通讯,多种模式,带触摸屏程序,动态画面 很值得学习和参考,工艺差距不大可以…...

人工智能艺术新范式:忍者像素绘卷:天界画坊在AIGC领域的应用探索

人工智能艺术新范式:忍者像素绘卷:天界画坊在AIGC领域的应用探索 1. 像素艺术的新纪元 当传统像素艺术遇上人工智能,一场视觉革命正在悄然发生。忍者像素绘卷:天界画坊作为AIGC领域的新锐力量,正在重新定义像素艺术的…...

YOLOFuse效果展示:实测RGB+红外融合检测,复杂环境下精度显著提升

YOLOFuse效果展示:实测RGB红外融合检测,复杂环境下精度显著提升 1. 引言:多模态检测的现实需求 在目标检测领域,单一传感器已经难以满足复杂场景下的应用需求。传统RGB摄像头在低光照、烟雾遮挡等恶劣环境下性能急剧下降&#x…...

Qwen-Image-Lightning部署教程:Mac M系列芯片Metal后端适配进展

Qwen-Image-Lightning部署教程:Mac M系列芯片Metal后端适配进展 1. 前言:当极速文生图遇上苹果芯 如果你是一名Mac用户,特别是使用M系列芯片的Mac用户,可能已经习惯了在AI绘画这件事上“望洋兴叹”。很多强大的文生图模型&#…...

计算机组成原理知识学习助手:基于GTE-Base-ZH的问答系统

计算机组成原理知识学习助手:基于GTE-Base-ZH的问答系统 1. 引言 学计算机组成原理,是不是经常感觉概念又多又绕?CPU流水线、Cache映射、指令周期……这些名词单独看好像都懂,但一遇到综合性的问题或者复杂的应用题,…...

Ostrakon-VL 扫描终端 Python 入门实战:3 步实现图像数据自动化处理

Ostrakon-VL 扫描终端 Python 入门实战:3 步实现图像数据自动化处理 1. 快速上手:为什么选择 Ostrakon-VL 如果你正在寻找一个简单高效的图像数据处理方案,Ostrakon-VL 会是个不错的选择。这个基于视觉语言模型的扫描终端,能够将…...

RVC语音转换效果展示:AI歌手专辑制作全流程实录分享

RVC语音转换效果展示:AI歌手专辑制作全流程实录分享 1. 引言:当AI遇见音乐创作 你有没有想过,让AI为你唱一首歌?不是那种冰冷的电子合成音,而是拥有独特音色、情感饱满,甚至能模仿你喜爱歌手风格的歌声。…...

Ubuntu动态库路径管理全攻略:从LD_LIBRARY_PATH到ldconfig实战

1. 动态库路径管理基础 当你第一次在Ubuntu上运行程序时,看到"error while loading shared libraries"这样的报错,是不是感觉一头雾水?这其实是Linux系统在告诉你:"我找不到程序需要的动态库文件啦!&q…...

**存算一体编程新范式:用 Rust 实现高效数据流驱动的计算模型**在传统冯·诺依曼架构中,CP

存算一体编程新范式:用 Rust 实现高效数据流驱动的计算模型 在传统冯诺依曼架构中,CPU 和内存之间存在“内存墙”问题——数据频繁搬运导致性能瓶颈。而**存算一体(Compute-in-Memory, CIM)**技术正试图打破这一桎梏,将…...

Python Final 类型限定符详解

一、基本概念与起源 Python中的Final是一种类型限定符(type qualifier),包含typing.Final类型标注和typing.final装饰器两种形式,用于告诉类型检查器(如mypy、pyright)某个实体不应该被重新赋值、重定义或覆…...

mPLUG工具场景案例:分析旅游照片、解读设计图纸

mPLUG工具场景案例:分析旅游照片、解读设计图纸 1. 引言:视觉问答的实用场景 想象你刚从一次旅行回来,手机里存了几百张照片。你想快速找出所有包含某个地标的照片,或者想知道某张照片里那座建筑的名字。又或者,你是…...

三步解锁WeMod专业版:Wand-Enhancer零基础免费教程

三步解锁WeMod专业版:Wand-Enhancer零基础免费教程 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/gh_mirrors/we/Wand-Enhancer 你是否厌倦了WeMod专业版每月高昂的订阅费…...

基于stm32室内空气质量监测(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T0882309M设计简介:本设计是基于单片机的空气质量监测系统设计,主要实现以下功能:通过温湿度传感器检测温湿度 通过甲醛…...

基于STM32的家用医药箱(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T0872301M设计简介:本设计是基于STM32的家用医药箱设计,主要实现以下功能:1.OLED屏显示药物名称和存储时间 2.具有温度检…...

基于单片机的智能太阳能热水器设计(有完整资料)

资料查找方式:特纳斯电子(电子校园网):搜索下面编号即可编号:T0852310M设计简介:本设计是基于单片机的智能太阳能热水器设计,主要实现以下功能:通过温度传感器检测水温 通过超声波模…...

5月19日起Roblox更新游戏发布要求,创作者反响不一!

Roblox发布新游戏要求与评估流程5月19日起,Roblox将对发布模式做出更改,增加公开发布游戏的新要求,以保障平台网络安全,为16岁以下用户营造更安全的环境。创作者可在账户设置中查看自己是否符合发布条件。新举措的背景与目的每天有…...

为什么说“卷积永存”?从ViT到ConvNeXt,看FC-CLIP如何用卷积CLIP解决开放词汇分割的泛化难题

卷积神经网络在开放词汇分割中的复兴:FC-CLIP如何重新定义视觉骨干网络 当Transformer架构在计算机视觉领域掀起革命浪潮时,许多人预言卷积神经网络(CNN)的时代即将终结。然而,FC-CLIP的横空出世,用"C…...

如何进行高效的抗体工程改造?

一、抗体工程改造为何是现代生物医药研发的关键技术?抗体工程改造是通过分子生物学和基因工程技术对抗体进行定向改良的系统性技术。这项技术能够突破天然抗体的功能局限,创造具有优化特性的新型抗体分子。在现代生物医药研发中,抗体工程改造…...

如何通过智能激活脚本告别Windows与Office激活烦恼

如何通过智能激活脚本告别Windows与Office激活烦恼 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 还在为Windows系统频繁弹出激活提示而困扰吗?或者Office软件突然变为只读模式&…...

自学网络安全第十二天

#CtrlC强制停止#Ctrld退出或登出#历史命令搜索可以通过history命令,查看历史输入过的命令可以通过:!命令前缀,自动执行上一次匹配前缀的命令可以通过:ctrl r,输入内容去匹配历史命令。(我觉得&…...

用Quartus II 13.1在FPGA上复刻一个复古数字钟:从25MHz到1Hz的分频实战

用Quartus II 13.1在FPGA上打造复古数字钟:从25MHz到1Hz的硬核分频艺术 在电子爱好者的世界里,没有什么比亲手实现一个复古数字钟更让人兴奋的了。想象一下,当你的FPGA开发板上的数码管开始跳动,精准地显示每一秒的流逝&#xff0…...

阿里小云KWS模型在安防对讲系统中的应用

阿里小云KWS模型在安防对讲系统中的应用 1. 引言 传统的安防对讲系统往往需要手动按键操作,在紧急情况下可能耽误宝贵时间。想象一下深夜小区门口有人需要紧急帮助,或者老人独自在家突发状况,这时候如果能够通过语音快速唤醒对讲系统&#…...

bootstrap怎么实现响应式的底部固定导航栏

应优先使用 Bootstrap 5.3 的 sticky-bottom 类替代 fixed-bottom,它通过 position: sticky; bottom: 0 实现滚动时始终可见且不遮挡内容;若用 fixed-bottom,则需为内容区静态预留 padding-bottom 避免遮盖,并避免在其中放置 inpu…...

终极指南:如何使用Python实现百度网盘直链解析与高速下载

终极指南:如何使用Python实现百度网盘直链解析与高速下载 【免费下载链接】baidu-wangpan-parse 获取百度网盘分享文件的下载地址 项目地址: https://gitcode.com/gh_mirrors/ba/baidu-wangpan-parse 你是否厌倦了百度网盘缓慢的下载速度?是否对会…...

爱毕业aibiye及其他六家专业辅导团队,凭借高效的在线服务在国内论文指导市场占据重要地位

核心工具对比速览 工具名称 核心优势 适用场景 降重效果 处理速度 aibiye 专业术语保留度高 理工科论文 40%→7% 快速 aicheck 逻辑结构保持好 社科类论文 38%→6% 极快 askpaper 上下文连贯性强 人文类论文 45%→8% 中等 秒篇 多语种支持 外语论文 42%…...

以爱毕业aibiye为代表的七家专业论文辅导团队,通过优质的在线指导在国内学术服务领域脱颖而出

核心工具对比速览 工具名称 核心优势 适用场景 降重效果 处理速度 aibiye 专业术语保留度高 理工科论文 40%→7% 快速 aicheck 逻辑结构保持好 社科类论文 38%→6% 极快 askpaper 上下文连贯性强 人文类论文 45%→8% 中等 秒篇 多语种支持 外语论文 42%…...

5分钟搞定PaddleOCR的Docker部署(附常见报错解决方案)

5分钟极速部署PaddleOCR:Docker方案与避坑指南 刚接触OCR技术时,最头疼的就是环境配置——Python版本冲突、CUDA驱动不兼容、依赖库版本问题...直到发现用Docker部署PaddleOCR,整个过程变得异常简单。作为国内领先的OCR框架,Paddl…...

别再手动拖拽了!用Python+DeepSeek API自动生成Visio流程图(附完整代码)

用PythonDeepSeek API实现Visio流程图全自动生成 每次手动拖拽Visio图形调整连接线时,你是否会感到效率低下?当流程需要反复修改时,传统绘图方式就像用打字机写代码一样笨拙。现在,通过Python脚本调用DeepSeek API,我…...