可变参数 函数(可变参数列表--1)

Hana库中的可变参数模板函数foldl1使用方法的测试程序 在这里,我们使用make_tuple函数创建一个包含4个整数的元组,并将其作为参数传递给foldl1函数。foldl1函数的作用是对可变参数列表中的所有元素进行二元操作,返回一个结果。该函数需要两个参数:第一个参数是一个可调用的二元操作函数,第二个参数是一个可变参数模板列表。总之,Hana库中的可变参数模板函数foldl1具有很多应用场景,它可以应用于各种不同的操作,如数学运算、元组操作、字符串操作等等。本篇文章将介绍Hana库中的可变参数模板函数foldl1的使用方法,并给出相应的测试程序。 阅读详情
 

1.什么是可变长度参数

我们在C语言编程中有时会遇到一些参数个数可变的函数,即函数的入参个数和类型是不确定的,例如printf()函数,其函数原型为:

int printf(char* format, ...);

它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的(用三个点“…”做参数占位符),实际调用时可以有以下的形式:

printf("%d",i);

printf("the number is %d ,string is:%s", i, s);    

以上这些东西已为大家所熟悉。但是究竟如何写可变参数的C函数以及这些可变参数的函数编译器是如何实现的呢?

2.可变长度参数函数的一个例子

为了说明问题,通过编写一个自定义的可处理可变长度参数的函数minprintf来说明。

       printf函数的定义格式为:

       int printf(char *fmt, …)

       这里,…的含义为参数的类型和个数是不确定的。…声明只能出现在参数列表的尾部。函数返回输出的字符个数。

       我们自己定义的函数minprintf声明格式为:

       void minprintf(char *fmt, …)

       因为这里我们不需要返回输出的字符个数,所以定义返回类型为void。

       带有可变长度参数的函数里,即没有参数的类型也没有参数的个数,那么编译器是怎么处理这样的函数的呢?

       标准头文件stdarg.h定义了一系列的宏来处理这个可变长度的参数列表。这个头文件的实现会因编译器的不同而各异,但它们的接口却是相同的。

       类型va_list: 定义为这样一个数据类型,循环使用且每次指向一个可变的参数;在我们举的例子minprintf函数里指变量ap(argument pointer);

       函数va_start: 初始化ap,使ap指向第一个可变的参数;注意,这个函数必须在使用ap前被调用;minprintf必须至少有一个确定的参数,而且,最后一个确定的参数才是va_sart函数的一个入参;

       函数va_arg:返回一个可变长度参数的值并使ap指向下一个可变长度参数,该函数使用一个类型名来确定要返回的类型和指针ap需要移动的字节单位;

       函数va_end:做一些必要的清理工作,需要在程序结束前调用。

other:

int vprintf(const char *format, va_list arg)
函数vprintf与printf等价,只是用arg替换了变量参数列表,arg由va_start宏初始化,并且va_arg可能会调用它。

sart算法重建程序(c++) c++程序编写的sart算法重建程序,是我的毕业设计,其中包括直线的建立,投影系数的求法和sart公式的实现。 立即下载

相关推荐

CT图像重建SART算法matlab代码

CT图像重建经典SART算法,可以用于学习图像重建,适用于新手

可变长度参数 char frm,... char frm...

 函数名: vfprintf 功  能: 送格式化输出到一流中 用  法: int vfprintf(FILE *stream, char *format, va_list param); 程序例: #include #include #include FILE *fp; int vfpf(char *fmt, ...) {    va_list argptr;    int

corydon的专栏 1212

共封装光学(CPO):下一代互联革命

Nvidia:产品:Quantum-X Q3450(115.2T,144×800G,2025H2上市)、Spectrum 6800(409.6T,512×800G,2026H2上市);技术路线:TSMC COUPE封装、MRM调制器、光栅耦合、外部激光源(Lumentum/Ayar Labs供应);战略定位:以横向扩展CPO验证供应链,最终聚焦纵向扩展场景(Feynman架构)。

存储随笔 4965

内核函数 __print_symbol

void __print_symbol(const char *fmt, unsigned long address);功能: 根据地址返回符号的基本信息 符号名 大小等fmt:格式化字符串 address:地址头文件: #include  <linux/kallsyms.h>内核中实现如下:void __print_symbol(const char *fmt, unsigned l...

yldfree的博客 2337

当vCenter的证书过期、Root密码过期、Root密码遗忘同时发生时的解决方法与步骤

vCenter,强制修改root密码,修改SSO User密码,修复证书过期问题

OCTSJimmy的专栏 5547

数字IC后端层次化Hierarchical Flow子系统Sub-System模块 block partition和pin assignment细节盘点

数字IC后端培训教程之Hierarchical Flow子系统block partition和pin assignment详细教程

weixin_37584728的博客 1604

文件操作函数

1.打开文件 FILE *fopen( const char * filename, const char *mode ); 参数:filename : 可以是一个用双引号括起的字面字符串/一个指向字符串的指针;           mode     :以何种模式打开文件; 2.格式化文件输出/输入 int fprintf( FILE *fp, char *fmt, … ); 参数

u010144189的专栏 650

环保 HJ212协议解析

由于是做环保相关的,有时需要对212协议进行拆包和解包。HJ212协议是一种字符串协议,数据传输通讯包主要由包头、数据段长度、数据段、CRC校验、包尾组成,其中“数据段”内容包括请求编码、系统编码、命令编码、密码、设备唯一标识、总包数、包号、指令参数。请求编码为请求的时间戳,系统编码ST统一规定为22,命令编码CN为该数据包的时间类型,访问密码、设备唯一标识在对接时由平台提供,指令参数为数据内容。通讯协议的数据结构如图4所示。 图4 通讯协议的数据结构 6.1.1通讯包结构组成 名称 类型 长度

ccf19881030的专栏 2万+

C/C++可变参函数示例

在C语言中, scanf,printf为我们最常用的可变参函数 (参数可以不确定的个数)。 可变参函数是如何实现的呢? #include <stdarg.h> #include <stdio.h> #include <string.h> //简版printf的实现 void simplePrintf(char *fmt,...) { int cval;/...

tb_youth的博客 489

STM32实战开发(110):基于STM32的智能地震监测系统开发

地震监测系统是自然灾害预警体系中至关重要的一部分。随着地震灾害的频发和对自然灾害预测精度要求的提高,智能地震监测系统逐渐成为研究的热点。STM32作为一款高性能的微控制器,凭借其强大的处理能力和丰富的外设接口,在地震监测领域中得到了广泛应用。本篇文章将详细介绍如何使用STM32实现一个智能地震监测系统的开发过程,涵盖硬件设计、软件编程、系统实现及相关代码。通过集成加速度传感器、地震数据采集、实时数据处理和无线数据传输功能,我们可以设计一个高效、稳定的智能地震监测系统。

2201_76125393的博客 710

RAP BDL 里的 field ( readonly ) 到底控制了什么?——从语法到运行时的全景解析

RAP行为定义中的只读字段控制 摘要:该代码片段展示的是RAP(ABAP RESTful Application Programming)行为定义语言(BDL)中的字段控制语法,用于声明业务对象中需由框架自动维护的只读字段。field ( readonly )语句将订单ID和审计字段(CreatedBy/CreatedAt等)标记为只读,确保这些字段在更新阶段不可修改。在managed场景下,RAP框架会自动处理这些行政性数据的写入:创建时填充创建信息,更新时刷新变更记录,并利用LocalLastChang

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 154

C语言可变参数的使用

C可变参数的使用可变参数函数指的是函数参数个数不固定的函数,类似printf(char* fmt, …); 如果想自己写一个可变参数的函数,需要用到stdarg.h头文件中的如下几个宏void va_start( va_list arg_ptr, prev_param ); type va_arg( va_list arg_ptr, type ); void va_end( va_list a

695

【Docker】常见容器问题解决#OCI runtime create failed: container_linux.go:349: starting container process

ERROR: for nginx Cannot start service nginx: OCI runtime create failed: container_linux.go:349: starting container process caused "process_linux.go:449: container init caused \"rootfs_linux.go:58: mounting \\\"/data/docker-compose/n

liu_chen_yang的博客 5528

《C语言深度剖析》第六章 函数栈帧与可变参数列表 p1可变参数列表(完结)( C语言从入门到入土(进阶篇)

目录 可变参数列表 1. 求两个数据中的最大值 2. 如果将参数改成char类型,求char类型变量中的最大值,代码会有问题吗? 3. 结果并未受影响,可是,我们解析的时候,是按照va_arg(arg, int)来解析的,这是为什么? 4. 注意事项 5. 原理 6. 先看看这几个宏的含义 7. 原理图 本章节文章是作者通过观看《C语言深度剖析》等各种资料总结的精华,基础部分省略了不少,是为了让大家能够更加深入了解C语言的魅力!因为为了避免与之前的文章发生赘述,所以就直接讲作者认为的精华

原来45的博客 1074

车载网络测试实操源码_使用CAPL解析VBF文件

VBF(Versatile Binary Format)文件是一种二进制文件格式,被沃尔沃、福特、马自达、吉利等汽车制造商广泛采用。这种格式无法使用我们常规的烧录器进行刷写,通常需要进行解析转化。如果各位需要自己编写软件或脚本来刷写VBF文件,或者需要对刷写功能进行测试时,那么本篇文章就会对你非常有用。今天我们就来讲一下如何使用CAPL脚本对VBF文件进行数据解析。VBF文件包含三部分:VBF版本段、文件头段、数据段。前面的版本段和文件头段是ASCII码,包含版本、地址、校验码等信息

文章主要涉及嵌入式软件开发、测试、项目管理等,欢迎交流,共同进步。 2991

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

《C语言深度剖析》第六章 函数栈帧与可变参数列表 p1可变参数列表(完结)( C语言从入门到入土(进阶篇)_可变参数 四字节对齐(2)

3’;//ascii值: 51。

2401_84978634的博客 398

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

《C语言深度剖析》第六章 函数栈帧与可变参数列表 p1可变参数列表(完结)( C语言从入门到入土(进阶篇)_可变参数 四字节对齐(1)

+){//获取并比较其他的。

2401_84978634的博客 323

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

《C++ Primer 第五版》(第6.1~6.3节) 函数形参和实参传递,可变参数列表和函数返回值

1.函数形参和实参传递问题 函数参数传递有两种:值传递(变量,指针),引用传递(使用别名)。 在形参和实参的传递过程中,牵涉到大的类类型对象、容器类型对象或者不支持拷贝操作的对象时,不适合采用值传递,应使用引用传递的方式。另外,实参形参传递的过程中,系统会忽略形参的顶层引用(可用变量赋值给常量形参,可以变量指针赋值给常量指针),因此不能使用顶层const...

xx18030637774的博客 340

晕倒,原来Java 1.5中有了可变参数和新的for each的语法了,今天才知道!

&lt;style type="text/css"&gt; .CodeFormat {font-family:"Courier New", Courier, mono; font-size:10pt; } &lt;/style&gt; 之前看到Visual Basic中,有所谓的函数可变参数列表,不知道有多羡慕。今天才知道在Java 1.5中已经引入了这个特性:示例代码如下: //请注意红...

编程开发资料库 89

Java之可变参数

这个时候编译期间会进行报错我们思考下为什么不能定义两个可变参数,其实很容易就可以想明白,当我们调用函数的时候,我们出入一连串的值的时候,我们无法确定可变参数的分别有多少个,例如这个时候nums1可能有0到5个,nums2也有可能有0到5个当可变参数不是最后一个的时候,编译器会报如上的错误,这个时候我们把可变参数nums1放到参数x的后面就不会报错误了.

qq_64580912的博客 1163

函数,方法重载和可变参数

函数,数组11.数组1.1 函数语法1.2 语法说明11.3 语法说明21.4 无参1.5带参2. 方法重载递归算法:3.数组3.1 数组的基本要素:3.2 使用数组四步走:3.3 静态赋值:边声明边赋值3.4动态赋值:3.5 数据的复制和逆序小知识: 1.数组 1.1 函数语法 修饰符 静态 返回值类型 方法名(形参类型 参数名) { 方法体语句; return 返回值; } 1.2...

qq_41969892的博客 659

Python:函数:参数列表 --- 1位置参数,2默认参数,3可变参数,4关键字参数,可变关键字参数(前后次序严格,不可存在交集)

Python:函数:参数列表(1位置参数,2默认参数,3可变参数,4关键字参数,5可变关键字参数)何为关键字参数?在定义函数时,函数体形参列表中,可变参数(*args)后不带默认值的参数,为调用函数时必须赋值的关键字参数,即一般的关键字参数。特征怎么巧用关键字参数隐藏默认值?去除默认函数。申明函数function(position1, *args, keyName1 = &amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;amp;

weixin_43473435的博客 2373

函数、可变参数

一、函数调用 java在调用函数时,如果属于同一个类,则不用带类名;如果不属于同一个类时,则需要 class.方法名 进行调用。 二、可变参数 Java1.5之后推出了可变参数。 以前我们学习过方法重载(形参个数、或者形参类型不同时,方法名可以相同),但是当同一形式方法太多时,代码也很多,相对来说也比较麻烦。 可变参数可以用一个方法来表示多个形参,要求是所有形参类型相同。 具体做法:修饰符 返回值类型 方法名 (数据类型...参数名){} 此时参数名是一个数组,根据传入实参的数量确定,可以是0个或者多个

code_farmer1024的博客 144

【Java】可变参数

C语言中,如果一个函数中可能会需要用到不同数量的参数,那么会在函数定义时使用…来省略一些参数来表示这个函数可能的参数数量是不确定的。那么,Java在jdk1.5之后也实现了这个功能,现在来介绍如何实现。

Zhangsama1的博客 1737

可变参数的应用

【代码】可变参数的应用。

weixin_51664099的博客 141
上一篇: 可变参数 函数(可变参列表—2) 实现小型日志文件
下一篇: 检索文件 (未完善 待续!)
雪岢奇
博客等级 码龄17年 310粉丝 60原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值