新闻详情

新闻详情

首页 / 资讯中心 / 详情

函数调用和变长参数

发布时间:2026/10/2 2:10:18来源:尧图网络
函数调用和变长参数
函数调用函数参数传入寄存器保护现场过程省略或压栈调用函数代码函数中按预设的入栈顺序使用参数调用惯例基于函数调用过程中参数传递原理函数调用方与被调用方对于传递和使用参数需要有一致的理解。因此需要调用惯例。调用惯例函数参数的传递顺序和方式栈的维护方式函数调用时将所有函数参数压栈在调用完成后需将所有参数出栈。出栈的工作可由函数的调用方完成也可由函数本身被调用方完成。名字修饰的策略在原函数名基础上按设定规则加上修饰汇编代码中可查看C语言默认调用惯例cdecl// 选择调用惯例// 定义__attribute__((cdecl))voidfoo(inta,intb){printf(a%d, b%d\n,a,b);}// 声明__attribute__((cdecl))voidfoo(int,int);x86-64 有统一的调用约定System V AMD64 ABI, 不能自定义变长参数函数变长参数的标准库头文件stdarg.h实现不定参数的步骤定义函数函数的最后一个参数使用省略号…省略号前可以有固定参数。函数内创建va_list变量这是一个在stdarg.h中定义的类型用于访问参数列表。初始化参数列表使用va_start宏和最后一个固定参数来初始化va_list变量。访问参数使用va_arg宏和va_list变量来访问每个参数。结束参数列表访问使用va_end宏清理va_list变量。#includestdarg.h#includestdio.h// 变长参数函数示例intfunc_name(intarg1,...){va_list ap;va_start(ap,arg1);intarg2va_arg(ap,int);doublearg3va_arg(ap,double);char*arg4va_arg(ap,char*);printf(%d %lf %s\n,arg2,arg3,arg4);va_end(ap);returnarg1;}intmain(){func_name(3,1,1.5,abc);return0;}arg1是函数的第一个参数省略号…表示后续的参数数量是可变的。要使用这种机制需要包含stdarg.h头文件它提供了处理可变参数的宏和函数。可见可变参数的函数的参数分为两种类型固定参数只表意和不定参数固定参数在前不定参数在后。变长参数宏##为宏字符串连接// 1.gcc编译下的定义#definemprintf(arg...)fprintf(stdout,##arg)// 2.MSVC下的定义#definemprintf(...)fprintf(stdout,__VA_ARGS__)// 使用mprintf(%d %lf %s\n,1,1.5,abc);
网站建设高端定制企业官网
RELATED

相关资讯

更多精彩内容,欢迎继续阅读

较早相关资讯

最新相关资讯

CentOS 7 桌面版远程控制:向日葵与 ToDesk 安装排错指南 2026/10/2 3:06:15

CentOS 7 桌面版远程控制:向日葵与 ToDesk 安装排错指南

远程办公这件事,很多人第一次踩坑都是从“我手上有一台装了图形界面的 CentOS 7 机器,但人不在现场”开始的。可能是实验室里那台跑着测试程序的台式机,可能是 VMware 里装好的 CentOS 7 虚拟机,也可能是公司内网一台用来跑打包脚…

阅读更多 →
Spring Boot实战:从X-Forwarded-For到可信代理链,彻底搞懂真实客户端IP解析 2026/10/2 3:06:15

Spring Boot实战:从X-Forwarded-For到可信代理链,彻底搞懂真实客户端IP解析

在Spring Boot项目里获取真实客户端IP,大概是所有后端开发都会踩的坑之一。你以为request.getRemoteAddr()拿到的就是用户IP?等你把项目丢到Nginx后面,再打印出来看看,十有八九拿到的全是127.0.0.1或者内网网关地址。这个问题看起…

阅读更多 →
合顾家家政服务质量怎么样,值得信赖吗 2026/10/2 3:06:15

合顾家家政服务质量怎么样,值得信赖吗

从二十世纪末家政行业走入大众视野,到如今家庭服务需求持续升级,家政赛道已经从零散的中介派单,走向系统化、标准化的人才供给时代。数十年间,无数从业者涌入这个充满潜力的民生领域,一边是逐年增长的市场需求&#xf…

阅读更多 →
多端社交圈子系统与IM源码实战:架构、部署与避坑指南 2026/10/2 3:06:14

多端社交圈子系统与IM源码实战:架构、部署与避坑指南

简介:一套2024年发布的多端社交圈子系统源码,基于ThinkPHP 6后端与uni-app移动端框架开发,适合需要快速搭建社区论坛、交友圈或小红书式自媒体的开发者与运营者。系统支持微信公众号、小程序、H5、PC四端账号同步,覆盖小程序授权登…

阅读更多 →
Educoder数据流图DFD通关:分层分解、命名规范与父子平衡 2026/10/2 3:06:13

Educoder数据流图DFD通关:分层分解、命名规范与父子平衡

做过头歌(educoder)软件工程导论实验的人,大概率在“结构化分析方法-数据流图”这一关停过很久。题目给的是一段几百字的需求描述,让你在一个在线画布上拖方框、拉箭头,然后点提交,系统告诉你哪一条数据流不…

阅读更多 →
Spring Boot集成Redis缓存实战:从配置到高可用的避坑指南 2026/10/2 3:06:01

Spring Boot集成Redis缓存实战:从配置到高可用的避坑指南

缓存这个东西,我一开始以为是"加个注解就完事"的简单活,直到在线上被教育过好几次才明白,Spring Boot集成Redis缓存的门道远比想象中多。配置层面的坑、序列化的坑、数据一致性的坑、热key的坑,每一个都可能让系统在流量…

阅读更多 →

今日资讯

本周资讯

本月资讯

看完文章仍有疑问?

联系尧图顾问,获取一对一建站咨询

立即免费咨询 📞 400-888-8888
📞 ✉