c++函数调用的大致工作过程

news/2025/11/5 23:11:23/文章来源:https://www.cnblogs.com/citStudy/p/19188532

  在C++中,函数调用是一个基本的编程概念,它允许我们将一组语句封装成一个独立的模块,以便重复使用或提高代码的可读性和可维护性。函数调用的工作过程可以分为以下几个步骤:

1、函数声明(Prototype)
在调用函数之前,必须先声明函数。函数声明告诉编译器函数的名称、返回类型以及接受的参数类型。例如:

int add(int a, int b);

2、函数定义(Definition)
函数定义包含了具体的实现代码,即在调用该函数时应该执行的语句。例如:

int add(int a, int b) {return a + b;
}

3、函数调用
在程序的适当位置调用函数。例如:

int result = add(3, 4);

4、 执行过程
当函数被调用时,编译器和运行时环境执行以下步骤:
(1)参数传递‌
‌实参(Actual Arguments)‌:传递给函数的实际值,通过进栈的方式。
‌形参(Formal Parameters)‌:在函数定义中声明的变量,用于接收实参的值。
实参的值被复制(或移动,对于C++11及以后的标准)到形参中。对于对象(类类型),这通常是通过拷贝构造函数或移动构造函数完成的。
(2) ‌栈帧(Stack Frame)的创建‌
在内存中为函数创建一个新的栈帧(Stack Frame)。栈帧包含了函数的局部变量(如果函数内有局部变量,它们也会在这个栈帧中被分配空间)、参数等。
(3) ‌执行函数体‌
执行函数体内的代码。这可能包括计算、条件判断、循环等操作。如果函数内有返回值,计算该返回值。
(4)清理栈帧‌
函数执行完毕后,局部变量所占用的内存被释放,栈帧被销毁。
(5) ‌返回控制‌
控制返回到函数被调用的地方,继续执行后续代码。
示例代码:

#include <iostream>
using namespace std;// 函数声明和定义在一起也可以,但不是必须的,分开写更清晰。
int add(int a, int b) {return a + b;
}int main() {int result = add(3, 4); // 函数调用cout << "Result: " << result << endl; // 输出结果return 0;
}

这个例子展示了如何声明、定义和调用一个简单的C++函数,以及函数的执行

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

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

相关文章

Slack端到端测试管道优化:构建时间减半的技术实践

本文详细介绍了Slack开发体验团队如何通过条件性前端构建和预构建资产缓存策略,将端到端测试管道的构建时间从10分钟缩短至2分钟,显著提升开发效率并降低云存储成本。在 DevOps 和开发者体验(DevXP)领域,速度和效…

结构体与联合体的区别

1.内存分配方式 结构体为每一个结构体的成员分配独立的内存空间;总内存为所有成员大小之和。 联合体的成员共享同一片内存空间,总内存大小为最大成员的大小。 2.成员访问特性 结构体可以同时访问所有的成员 联合体同…

Day14综合案例二--

<!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0">…

解决colcon编译卡死

下面这两个命令我这里不起作用:colcon build --parallel-workers 6 colcon build --executor sequential下面命令可以解决卡死问题:MAKEFLAGS=-j4 colcon build

铁杆粉丝占比20251105

序号 代码 名称 最新价(2025.11.05) 涨跌幅(2025.11.05) 铁杆粉丝占比 涨跌额(2025.11.05) 最高价(日线不复权)(2025.11.05) 最低价(日线不复权)(2025.11.05) 换手率(2025.11.05) 量比(2025.11.05) 成交量(股)(2025.11…

Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么? - Higurashi

基于:Mybatis 都有哪些 Executor 执行器?它们之间的区别是什么?在 MyBatis 中,Executor 是一个关键的接口,负责执行映射的 SQL 语句。MyBatis 提供了四种类型的 Executor,每种 Executor 在执行 SQL 和处理事务方…

100小时学会SAP—问题10:ME51N提示物料XX的强制账户设置(输入账户设置类别)

100小时学会SAP—问题10:ME51N提示物料XX的强制账户设置(输入账户设置类别)执行事务码ME51N时,报错如下:物料XXXXXX的强制账户设置(输入账户设置类别)解决方法:SPRO-后勤常规-物料主数据-基本设置-物料类型-定义…

P8990 [北大集训 2021] 小明的树 题解

QwQP8990 [北大集训 2021] 小明的树 题解 首先刻画 “美丽”,考虑灭点,由于 1 始终灭,所以形如一个包含 1 的连通块,灭点连通块数量要为 1。 因为要刻画连通块数量,考虑点减边容斥,即连通块个数是灭点个数减 “灭…

100小时学会SAP—问题11:MIGO收货时报错不可能为条目BSX CN01确立账户

100小时学会SAP—问题11:MIGO收货时报错不可能为条目BSX CN01确立账户执行事务码MIGO收货时,报错如下:不可能为条目BSX CN01确立账户。解决方法: 1、首先按照100小时学会SAP步骤配置(在用MMR1、MMF1事务码创建物料…

【动态维护前 x 大元素】LeetCode 3321. 计算子数组的 x-sum II

View Post【动态维护前 x 大元素】LeetCode 3321. 计算子数组的 x-sum II题目 https://leetcode.cn/problems/find-x-sum-of-all-k-long-subarrays-ii/description/ 题解 定义两个有序集合 \(L, R\) 动态维护数组前 \(…

100小时学会SAP—问题8:财务凭证行项目BSEG及对应的六张表

100小时学会SAP—问题8:财务凭证行项目BSEG及对应的六张表FI会计模块中输入一笔业务将会记一个财务凭证,SAP系统中将凭证信息分为抬头信息和明细信息两部分加以存储。其中抬头(Header)信息存储在透明表BKPF中,明细(…

100小时学会SAP—问题9:MD03提示日期在有效工厂日历之后(请改正)

100小时学会SAP—问题9:MD03提示日期在有效工厂日历之后(请改正)执行事务码MD03时,报错如下:提示日期在有效工厂日历之后(请改正)解决方法:这是因为在创建工厂数据的时候工厂的日期没有更改造成的。 路径为:SP…

100小时学会SAP—问题6:创建采购收货时出现WE在年2025中编号不存在

100小时学会SAP—问题6:创建采购收货时出现WE在年2025中编号不存在前台 后勤—物料管理—库存管理—货物移动—收货—对采购订单—采购订单GR(MIGO) 报了如下错误:有关业务/事件类型WE在年2025的号码范围不存在解决…

100小时学会SAP—问题7:FB70提示过账码没有定义

100小时学会SAP—问题7:FB70提示过账码没有定义执行事务码FB70时,报错如下:Posting keys not defined原因:在文档“0528—FB70运行时提示在表T030B中AGD输入丢失”中,解决方法错误,其中的PK码自己瞎填,导致错误…

树剖

接dfs序。 https://www.cnblogs.com/ybjnb/p/19089551 树剖 (dfs序的性质依旧满足 即子树也是一段连续区间)将一颗树转化为一个序列 将树上任意一条路径转化成 log(n) 段连续区间 然后就可以用序列数据结构维护信息。…

100小时学会SAP—问题5:SAP导航菜单字体突然变小

100小时学会SAP—问题5:SAP导航菜单字体突然变小问题:SAP导航菜单字体突然变小 无论修改字体、字符集或登录其他服务器的SAP都是菜单字体变小解决方法: 删除注册表(regedit)HKEY_CURRENT_USER\Software\SAP\SAPGU…

如何降低大模型幻觉

目录数据层面的改进检索增强生成(RAG)提示工程优化强化学习与人类反馈多模型验证置信度校准事实核查层特定领域微调 在大模型开发中减少幻觉是一个核心挑战。以下是一些有效的策略: 数据层面的改进 高质量的训练数据…

11月5日---学习总结

一、内存四区 代码区|全局区|栈区|堆区 1.程序运行前(生成可执行程序exe,未执行该程序之前) 1.1 代码区: *特点1:只读:不可修改 *特点2:共享:防止频繁使用占用内存 1.2全局区:全局变量、静态变量、常量 *静态…

11-2

(1)今天学习了将idea编写的后端代码与vscode上的前端代码连接 (2)明天继续深造