C++简明教程(文章要求学过一点C语言)(2)

news2024/12/22 9:30:54

一、什么是代码文件(头文件和源文件)

想象你在写一篇很长的故事(这就好比是一个 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2263683.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

内容与资讯API优质清单

作为开发者,拥有一套API合集是必不可少的。这个开发者必备的API合集汇集了各种实用的API资源,为你的开发工作提供了强大的支持!无论你是在构建网站、开发应用还是进行数据分析,这个合集都能满足你的需求。你可以通过这些免费API获…

线程知识总结(二)

本篇文章以线程同步的相关内容为主。线程的同步机制主要用来解决线程安全问题,主要方式有同步代码块、同步方法等。首先来了解何为线程安全问题。 1、线程安全问题 卖票示例,4 个窗口卖 100 张票: class Ticket implements Runnable {priv…

多智能体/多机器人网络中的图论法

一、引言 1、网络科学至今受到广泛关注的原因: (1)大量的学科(尤其生物及材料科学)需要对元素间相互作用在多层级系统中所扮演的角色有更深层次的理解; (2)科技的发展促进了综合网…

OB删除1.5亿数据耗费2小时

目录 回顾:mysql是怎么删除数据的? 删除方案 代码实现 执行结果 结论 本篇是实际操作 批量处理数据以及线程池线程数设置 记录学习 背景:有一张用户标签表,存储数据量达4个亿,使用OceanBase存储,由于…

简洁IIC协议讲述

目录 一:首先,IIC传输是在2条线上传输的。 二:时钟信号的频率和占空比解释(可以看作PWM波形) 三:传输信号的流程图(起始和终止信号都是由主机(我)控制) 四:开始信号和…

IIC I2C子协议 SMBus协议 通信协议原理 时序 SMBus深度剖析

引言:系统管理总线(SMBus)是一种双线接口,通过该接口,各种系统组件芯片和设备可以相互以及与系统其他部分通信。它基于IC总线的操作原理。附录B提供了一些SMBus特性与IC总线不同的方式的描述。 SMBus为系统和电源管理相…

重拾设计模式--建造者模式

文章目录 建造者模式(Builder Pattern)概述建造者模式UML图作用:建造者模式的结构产品(Product):抽象建造者(Builder):具体建造者(Concrete Builder&#xff…

Orleans异常传递测试

Orleans具备非常简单的异常传递机制,Grain或Placement注解逻辑抛异常,可以直接传递到客户端,测试代码如下: 首先在客户端、Silo服务程序的Main方法增加ThreadException事件处理函数,避免未处理异常导致进程闪退。 sta…

【Linux进程】基于管道实现进程池

目录 前言 1. 进程池 1.1 基本结构: 1.2. 池化技术 1.3. 思路分析 1.4. 代码实现 总结 前言 上篇文章介绍了管道及其使用,本文在管道的基础上,通过匿名管道来实现一个进程池; 1. 进程池 父进程创建一组子进程,子进…

PCL点云库入门——PCL库中点云数据拓扑关系之K-D树(KDtree)

1、点云的拓扑邻域 在三维空间数据处理的领域中,点云的邻域概念显得尤为关键,它不仅链接了点云数据之间的拓扑结构,而且在构建点云间的拓扑关系时起到了桥梁的作用。这种关系的建立,使得我们能够以一种高效、迅速的方式管理庞大的…

Leecode刷题C语言之根据第k场考试的分数排序

执行结果:通过 执行用时和内存消耗如下: int gk 0;int compare(const void* a, const void* b) {int* ua *(int**)a;int* ub *(int**)b;return ub[gk] - ua[gk]; }int** sortTheStudents(int** score, int scoreSize, int* scoreColSize, int k, int* returnSiz…

由popover框一起的操作demo问题

场景: 当popover框弹出的时候,又有MessageBox 提示,此时关闭MessageBox 提示,popover就关闭了。将popover改为手动激活,可以解决这个问题,但是会引起另外一个问题,之前(click触发的时…

QT修改运行窗口的图标

首先,在.pro下添加两行: Debug:DESTDIR $$PWD Release:DESTDIR $$PWD 指定目标文件的路径 指定生成的debug和release文件夹路径在当前项目下 上面是为了防止爆奇怪的错 右键项目添加新文件 选择QT-》QT Resource File 起个名,然后下一步…

降低Mobx技术债问题-React前端数据流方案调研整理

我们现在主要是使用Mobx,但是Mobx的易于上手和灵活度也带来了很多预期以外的问题,随着项目的增长我们的代码技术债变得愈加沉重,不同的模块杂糅一起、单一store无限膨胀。 为此我们的调研是希望能找到一个更好的state配置、数据流的约定方案。…

sql server索引优化语句

第一步 建一个测试表 --create table TestUsers --( -- Id int primary key identity(1,1), -- Username varchar(30) not null, -- Password varchar(10) not null, -- CreateDateTime datetime not null --)第二步 插入100w数据 大概1分钟执行时间 ----插入数据…

aioice里面candidate固定UDP端口测试

环境: aioice0.9.0 问题描述: aioice里面candidate固定UDP端口测试 解决方案: /miniconda3/envs/nerfstream/lib/python3.10/site-packages/aioice import hashlib import ipaddress import random from typing import Optional import…

Java(二十五)final关键字

Java中的final关键字在编写程序中,比较常用。尤其是在上文中的匿名内部类中。 final 表示最终,也可以称为完结器,表示对象是最终形态的,不可改变的意思。 使用final修饰的的类,是“断子绝孙”的。 一:final修饰成员变量 Final修饰的类的成员变量是常量,不可被改变。 …

MySQL三大日志-Redo Log

Redo Log简介 事务中修改的任何数据,将最新的数据备份存储的位置(Redo Log),被称为重做日志。 Redo Log 的生成和释放 随着事务操作的执行,就会生成Redo Log,在事务提交时会将产生Redo Log写入Log Buff…

【libuv】Fargo信令2:【深入】client为什么收不到服务端响应的ack消息

客户端处理server的ack回复,判断链接连接建立 【Fargo】28:字节序列【libuv】Fargo信令1:client发connect消息给到server客户端启动后理解监听read消息 但是,这个代码似乎没有触发ack消息的接收: // 客户端初始化 void start_client(uv_loop_t

html中实用标签dl dt dd(有些小众的标签 但是很好用)

背景描述 html <dl> <dt> <dd>是一组合标签&#xff0c;他们与ol li、ul li标签很相似 但是他却是没有默认前缀并且有缩进的标签 使用方式与table表格的标签一致 使用方式 dt和dd是放于dl标签内&#xff0c;dt与dd处于dl下相同级。就是dt不能放入dd内&am…