C++简明教程(文章要求学过一点C语言)(2)
一、什么是代码文件(头文件和源文件)
想象你在写一篇很长的故事(这就好比是一个 C++ 程序),你可能会把故事分成不同的章节(类似于 C++ 中的文件)。
-
头文件(.h):它像是故事的大纲或者人物介绍。比如你要写一个关于超级英雄的故事,头文件里可能就会有超级英雄的名字、他有哪些超能力(这就类似函数的声明,先告诉大家有这个超能力,但还没详细说怎么用超能力战斗,也就是函数还没具体实现)。它的主要作用是把一些重要的信息汇总起来,方便其他地方(其他源文件)查看和引用,这样大家就知道整个故事大概有哪些元素。
-
源文件(.cpp):这就是具体讲故事的地方,比如超级英雄怎么用超能力打败敌人,会详细地描述战斗过程(对应函数的具体实现)。在这里,会把在头文件里提到的超能力详细地展现出来,通过编写具体的代码来实现那些在头文件里“预告”过的功能。
二、什么是声明
还是以超级英雄的故事为例,声明就像是在故事开头说“我们的超级英雄有飞行、发射激光的超能力”,只是简单地告诉大家有这些能力,但是没有详细说飞行的速度有多快、激光的威力有多大等具体细节。
在 C++ 里,函数声明就是在头文件中写的类似于 int addNumbers(int num1, int num2); 这样的语句。它告诉编译器,有一个叫做 addNumbers 的函数,它接收两个整数作为参数,并且会返回一个整数。这样,当其他源文件中用到这个函数时,编译器就知道这个函数的存在以及它的基本样子,即使还没看到函数具体是怎么实现加法运算的(也就是函数体)。这就像你知道超级英雄有飞行能力,但还没看到他具体怎么飞一样,先有个概念,后面再详细了解。
三、什么是编译
编译就像是把你写的故事(C++ 代码)翻译成一种更底层、计算机能直接理解的语言(机器语言)。
当你写好 C++ 的源文件后,编译器会逐行检查你的代码,看看有没有语法错误,就像检查故事里有没有错别字或者语句不通顺的地方。如果发现错误,就会告诉你哪里不对,让你修改。如果没有错误,就会把源文件转换成一种中间形式(比如目标文件,通常是.obj 文件),这个过程就是编译。
例如,你写了一个源文件,里面定义了一些函数,并且调用了其他源文件中声明的函数。编译器会把这个源文件中的函数实现部分翻译成机器语言,并把它打包成一个目标文件,但是如果这个源文件中调用了其他地方的函数,它会先在头文件里找到那些函数的声明,知道怎么去调用它们,但是这时候还不知道那些函数具体是怎么实现的(这就涉及到链接了)。
四、什么是链接
链接就像是把你故事里不同章节提到的相关内容联系起来。
在 C++ 中,你可能有多个源文件,每个源文件都被编译成了目标文件。但是这些源文件之间可能会相互调用函数,比如一个源文件里的函数调用了另一个源文件里定义的函数。链接就是把这些目标文件以及用到的库文件(库文件就像是一些已经写好的通用故事章节,比如数学计算库就像一个专门讲怎么进行复杂数学运算的章节)整合在一起,让它们能够协同工作。
例如,源文件 A 调用了源文件 B 中定义的函数,在编译阶段 A 只是知道有这个函数可以调用(通过头文件声明),在链接阶段,链接器就会找到源文件 B 编译后的目标文件中那个函数的实现代码,把它们连接起来,使得整个程序成为一个完整的可执行文件,就像把不同章节的故事连贯地装订成一本书,让读者(计算机)能够从头读到尾,顺利执行程序的功能。
五、什么是生成(生成可执行文件)
经过编译和链接后,最终就会生成一个可执行文件(.exe 文件,在 Windows 系统下),这就像是把你写好的故事完整地印刷成一本书,计算机可以直接“阅读”(执行)这本书,按照你写的代码逻辑去完成各种任务,比如计算数学题、处理图像、控制游戏角色等。这个可执行文件就是你整个 C++ 程序的最终成果,用户可以直接双击运行它,看到程序的运行效果,就像读者可以打开书阅读故事一样。
通过这样逐步深入且通俗易懂的比喻和实例讲解,初学者能够更清晰地理解 C++ 中代码文件、声明、编译、链接和生成可执行文件这些关键概念以及它们之间的关系和作用。
看看这个
https://blog.csdn.net/weixin_46531416/article/details/121175241
相关文章:
C++简明教程(文章要求学过一点C语言)(2)
一、什么是代码文件(头文件和源文件) 想象你在写一篇很长的故事(这就好比是一个 C 程序),你可能会把故事分成不同的章节(类似于 C 中的文件)。 头文件(.h):它…...
防火墙技术与网络安全
网络已经成为了人类所构建的最丰富多彩的虚拟世界,网络的迅速发展,给我们的工作和学习生活带来了巨大的改变。我们通过网络获得信息,共享资源。如今,Internet遍布世界任何一个角落,并且欢迎任何一个人加入其中…...
html 中 表格和表单的关系与区别
在 HTML 中,表格 (<table>) 和表单 (<form>) 是两种常用于展示数据和收集用户输入的元素。它们具有不同的功能和结构。以下是关于这两者的详细介绍: 1. HTML 表格(<table>) 表格用于展示结构化的数据…...
基于Java的购物网站毕业论文
标题:基于 Java 的购物网站 内容:1.研究背景 1.1.国内研究进展 近年来,随着我国电子商务市场的不断发展,越来越多的企业开始涉足电子商务领域。其中,基于 Java 的购物网站成为了众多企业的首选。Java 语言具有跨平台、安全性高、稳定性好等优…...
Redis——缓存预热+缓存雪崩+缓存击穿+缓存穿透
文章目录 1、 缓存预热2、 缓存雪崩3、 缓存击穿4、 缓存穿透总结 1、 缓存预热 什么是预热: mysql加入新增100条记录,一般默认以mysql为准作为底单数据,如何同步给redis(布隆过滤器)这100条新数据。 为什么需要预热…...
wxWidgets使用wxStyledTextCtrl(Scintilla编辑器)的正确姿势
开发CuteMySQL/CuteSqlite开源客户端的时候,需要使用Scintilla编辑器,来高亮显示SQL语句,作为C/C领域最成熟稳定又小巧的开源编辑器,Scintilla提供了强大的功能,wxWidgets对Scintilla进行包装后的是控件类:…...
【ETCD】【实操篇(二)】如何从源码编译并在window上搭建etcd集群?
要在 Windows 上编译 etcd 及 etcdctl 工具,并使用 bat 脚本启动 etcd 集群,首先需要准备好开发环境并确保依赖项正确安装。下面是从 etcd 3.5 源码开始编译和启动 etcd 集群的详细步骤: 目录 1. 安装 Go 环境2. 获取 etcd 源码3. 编译 etcd…...
服务器数据恢复—V7000存储中多块磁盘出现故障导致业务中断的数据恢复案例
服务器存储数据恢复环境: 一台V7000存储上共12块SAS机械硬盘(其中1块是热备盘),组建了2组Mdisk,创建了一个pool。挂载在小型机上作为逻辑盘使用,小型机上安装的AIXSybase。 服务器存储故障: V7…...
冯诺依曼架构与哈佛架构的对比与应用
冯诺依曼架构(Von Neumann Architecture),也称为 冯诺依曼模型,是由著名数学家和计算机科学家约翰冯诺依曼(John von Neumann)在1945年提出的。冯诺依曼架构为现代计算机奠定了基础,几乎所有现代…...
Hive其四,Hive的数据导出,案例展示,表类型介绍
目录 一、Hive的数据导出 1)导出数据到本地目录 2)导出到hdfs的目录下 3)直接将结果导出到本地文件中 二、一个案例 三、表类型 1、表类型介绍 2、内部表和外部表转换 3、两种表的区别 4、练习 一、Hive的数据导出 数据导出的分类&…...
CMake function使用
在 CMake 中,function 用于定义一个可复用的代码块,可以在 CMake 脚本中多次调用。它类似于其他编程语言中的函数。函数内的变量默认是局部的,不会影响外部的变量,除非显式地使用 PARENT_SCOPE 来修改父级作用域中的变量。 基本语…...
【AI学习】Huggingface复刻Test-time Compute Scaling技术
OpenAI ChatGPT o1 背后的关键技术Test-time Compute Scaling,Huggingface实现并开源了! Hugging Face 团队发布了一篇关于“开源模型中的推理阶段计算扩展”(Test-time Compute Scaling) 的研究文章。Hugging Face 团队通过复现…...
前端导出PDF的组件及方法
前端导出PDF的组件及方法 在Web应用程序中,导出PDF文件是一项常见的需求。无论是为了打印、分享还是存档,能够将网页内容转换为PDF格式都非常有用。幸运的是,前端开发者有多种方法和组件可以实现这一功能。在本文中,我们将详细介…...
Mac升级macOS 15 Sequoia后,无法ssh连接本地虚拟机
现象 macOS 15后,无法ssh连接本地启动的虚拟机,提示错误: No route to host,也ping不通。包括UTM、Parallels Desktop这两个虚拟机软件。之前都是没问题的,通过一些简单排查,目前没发现什么问题。 在虚拟…...
Pytorch | 利用MI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击
Pytorch | 利用MI-FGSM针对CIFAR10上的ResNet分类器进行对抗攻击 CIFAR数据集MI-FGSM介绍背景算法原理 MI-FGSM代码实现MI-FGSM算法实现攻击效果 代码汇总mifgsm.pytrain.pyadvtest.py 之前已经针对CIFAR10训练了多种分类器: Pytorch | 从零构建AlexNet对CIFAR10进行…...
linux 无网络安装mysql
下载地址 通过网盘分享的文件:mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz 链接: https://pan.baidu.com/s/1qm48pNfGYMqBGfoqT3hxPw?pwd0012 提取码: 0012 安装 解压 tar -zxvf mysql-5.7.33-linux-glibc2.12-x86_64.tar.gz mv /usr/mysql-5.7.33-linux-glibc2.1…...
自毁程序密码—阿里聚安全(IDA动态调试)
App信息 包名:com.yaotong.crackme Java层分析 MainActivity 很容易就能看出来是在securityCheck函数里进行安全校验。securityCheck是一个native函数,到so中进行分析。 SO层分析 定位函数位置 在导出函数里搜索 securityCheck 数据类型修复和…...
【华为OD-E卷-寻找关键钥匙 100分(python、java、c++、js、c)】
【华为OD-E卷-寻找关键钥匙 100分(python、java、c、js、c)】 题目 小强正在参加《密室逃生》游戏,当前关卡要求找到符合给定 密码K(升序的不重复小写字母组成) 的箱子,并给出箱子编号,箱子编…...
vscode 使用说明
文章目录 1、文档2、技巧显示与搜索宏定义和包含头文件 3、插件4、智能编写5、VSCode 与 C(1)安装(2)调试(a)使用 CMake 进行跨平台编译与调试(b)launch.json(cÿ…...
【Linux系统编程】:信号(2)——信号的产生
1.前言 我们会讲解五种信号产生的方式: 通过终端按键产生信号,比如键盘上的CtrlC。kill命令。本质上是调用kill()调用函数接口产生信号硬件异常产生信号软件条件产生信号 前两种在前一篇文章中做了介绍,本文介绍下面三种. 2. 调用函数产生信号 2.1 k…...
终极LuaJIT反编译指南:如何快速恢复丢失的Lua源代码
终极LuaJIT反编译指南:如何快速恢复丢失的Lua源代码 【免费下载链接】luajit-decompiler https://gitlab.com/znixian/luajit-decompiler 项目地址: https://gitcode.com/gh_mirrors/lu/luajit-decompiler 你是否曾面对编译后的LuaJIT字节码文件束手无策&…...
OpenClaw Windows一键部署包简体中文版下载
OpenClaw(小龙虾)Windows 一键部署保姆级教程 | 10分钟养出你的数字员工(2026最新版) 前言:2026年爆火的开源AI智能体OpenClaw(昵称小龙虾),GitHub星标超28万,凭“本地运…...
收藏 | 零基础小白也能看懂:AI大模型应用开发入门指南
文章介绍了AI领域两大门派:传统算法工程师与大模型应用开发工程师。传统算法工程师专注于算法研发,是AI基建者;大模型应用开发工程师则侧重于将现成大模型应用于实际业务场景,是场景魔术师。文章指出,大模型应用开发工…...
GitHub Desktop汉化神器:3分钟让英文界面变中文
GitHub Desktop汉化神器:3分钟让英文界面变中文 【免费下载链接】GitHubDesktop2Chinese GithubDesktop语言本地化(汉化)工具 【GitHub桌面客户端中文汉化】 项目地址: https://gitcode.com/gh_mirrors/gi/GitHubDesktop2Chinese 还在为GitHub Desktop的英文…...
免费暗黑2存档编辑器终极指南:3分钟成为游戏存档修改大师
免费暗黑2存档编辑器终极指南:3分钟成为游戏存档修改大师 【免费下载链接】d2s-editor 项目地址: https://gitcode.com/gh_mirrors/d2/d2s-editor 还在为暗黑破坏神2的存档问题烦恼吗?角色属性不够强、装备不理想、任务进度丢失……现在…...
图片转Word怎么转?2026年图片转文档完整方法与工具对比
日常工作中,我们经常需要将拍摄的照片、截图或扫描的纸质文件转换成可编辑的Word文档。无论是转录会议笔记、整理手写资料,还是数字化办公文件,高效的转换工具能显著提升工作效率。本文将详细介绍多种图片转word文档的方法,帮你找…...
初次使用Taotoken官方价折扣进行模型测试的成本节省体验
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 初次使用Taotoken官方价折扣进行模型测试的成本节省体验 1. 项目背景与成本挑战 最近启动一个新项目,需要集成大模型能…...
Midjourney V6色彩失控?3步锁定prompt权重偏差,92%用户忽略的--s参数与--stylize协同机制揭秘
更多请点击: https://intelliparadigm.com 第一章:Midjourney V6色彩失控的本质归因 Midjourney V6 的色彩表现相较前代出现显著波动,高频出现色相偏移、饱和度塌陷与明度断裂等现象。这种“色彩失控”并非随机噪声,而是模型底层…...
终极Windows与Office智能激活解决方案:KMS_VL_ALL_AIO全面解析与实战指南
终极Windows与Office智能激活解决方案:KMS_VL_ALL_AIO全面解析与实战指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO KMS_VL_ALL_AIO是一款功能强大的Windows与Office智能激活脚…...
华为设备上MQC实战:用流策略搞定网络流量路径规划(含ACL+OSPF联动)
华为设备MQC高级应用:动态路由环境下的智能流量路径规划 在复杂的企业网络环境中,流量路径规划往往成为网络工程师面临的核心挑战之一。当网络中存在多条等价路径时,传统的路由协议(如OSPF)会基于简单的哈希算法进行负…...
