c++中参数不定函数和va_list的使用

【c++】如何给函数传递不定数量的参数 有时候我们给一个函数传递的参数数量是不确定的,比如如果想打印多个字符串,数量不定,那么可以这么写: #include <stdarg.h> #include <iostream> using namespace std; void printStrings(int argNum, ...) { va_list args; va_start(args, argNum); for (int i = 0; i < argNum; i++) { 阅读详情

原文地址:http://hi.baidu.com/jesseshang/blog/item/1c4e9933642f7b40ac4b5fc3.html

 

 

我觉得不定参数的函数的使用中,第一个参数一般表示一种参数传入的规则(如何使用后面的参数)

其后的参数是实际使用的数据。

贴一个平均数的函数来自 《c和指针》

不定参宏函数、C/C++风格不定参函数 本文系统介绍了不定参函数的三种实现方式:C风格宏函数、C风格不定参函数和C++可变参数模板。在C宏函数部分,重点讲解了__VA_ARGS__和##运算符的用法,以及__FILE__和__LINE__宏的应用;C风格函数部分详细解析了va_list、va_start等宏的使用方法和内存管理机制;C++模板部分则深入探讨了可变参数模板、递归展开、完美转发等现代C++特性。通过对比分析,文章指出C++模板方法在类型安全性和灵活性上的优势,同时保留传统方法在特定场景下的适用性,为开发者提供了全面的技术参考。 阅读详情

相关推荐

ICC2 实战秘籍:create_workspace 命令全解析

必选项:工作区名称,这可是创建工作区的 “身份证”,必不可少。技术数据选项匹配:优先考虑用 -technology 直接加载技术文件,这是获取最新、最准确技术数据的首选路径;要是已经有合适的技术库了,那 -use_technology_lib 引用现有技术库也能快速上手。精度设置优先规则:技术文件自动配置排在第一位,能自动适配就别手动操心;要是自动配置不理想,那就显式指定 scale_factor;实在没要求,就用默认配置,但得清楚它的精度限制。

weixin_50820814的博客 1123

List转换String字符串几种方式

这里和StringUtils.join()有区别,参数顺序不一样,另外,StringUtils.join()可以传入Integer或者其他类型的集合或数组,而String.join()尽可以传入实现charSequence接口类型的集合或数组。StringUtils.join() 和 String.join()用途:将数组或集合以某拼接符拼接到一起形成新的字符串。此方法将列表转换为具有给定分隔符、前缀和后缀的字符串。如果是字符串类型的集合或数组推荐使用String.join()

Lucky boy的博客 2万+

从X86到ARM:将VINS-Fusion-GPU和ego-planner迁移到Jetson Orin-NX时,我踩过的那些‘环境差异’坑

本文详细介绍了将VINS-Fusion-GPU和ego-planner从X86平台迁移到Jetson Orin-NX(ARM架构)时遇到的环境差异问题及解决方案。内容涵盖ARM与X86的架构差异、依赖管理、性能调优和硬件接口适配,特别强调了CUDA在ARM平台上的优化配置和内存访问技巧,帮助开发者高效完成跨平台迁移。

weixin_42647395的博客 119

c++ 可变参数列表 va_list 作为参数传递

va_list va_start va_end 可变参数列表

xkdlzy的专栏 3821

Dify工作流教程|以抓取网页并更新知识库为例详细讲解工作流编排过程(附DSL文件)

{"name": "{新建的title变量}","text": "新建的content变量","indexing_technique": "high_quality","process_rule": {"mode": "automatic"}}有没有很痛苦,明明添加书签的网页,当你想阅读的时候,总是找不到或者好不容易找到了,发现网页404了。如果有个小工具,直接能把你输入的链接内容抓取下来,并且加入到你的知识库中,你说他香不香。无法获取授权的,也可以使用网页抓取工具,这个是免费的,抓取效果也可以。

同名公众号:dify实验室 1万+

单粒子翻转对FPGA的影响及解决方法

单粒子翻转对FPGA的影响及解决方法

航天领域资深码农,型号经验丰富,一线干货分享 2446

C/C++编程:可变参数

_VA_ARGS变长参数的宏定义是指在宏定义中参数列表的最后一个参数为省略号,而预定义宏__VA_ARGSprintf就可以定义一个printf的别名PR。

OceanStar的博客 9105

Windows 下安装 Hermes Agent 完整教程(含踩坑记录)

不支持原生 Windows,必须通过 WSL2 (Windows Subsystem for Linux 2) 运行。WSL2 是 Windows 内置的 Linux 兼容层,可以在 Windows 上运行完整的 Linux 环境。

weixin_50191542的博客 4271

va_list 原理以及用法

VA_LIST 是在C语言中解决变参问题的一组宏,变参问题是指参数的个数不定,可以是传入一个参数也可以是多个;可变参数中的每个参数的类型可以不同,也可以相同;可变参数的每个参数并没有实际的名称与之相对应,用起来是很灵活。...

ID314846818的博客 6534

MATLAB基础应用精讲-【深度强化学习】SAC(Soft Actor-Critic)算法(附MATLAB和python代码实现)

Actor 网络:用于选择动作。Critic 1 和 Critic 2 网络:用于估计 Q 值。Target Critic 1 和 Target Critic 2:与 Critic 网络架构相同,用于生成更稳定的目标 Q 值。,即在保证探索的情况下选择高价值动作。软更新目标 Q 网络参数,使得目标网络参数缓慢向当前网络靠近,避免振荡。

qq_36130719的博客 454

OpenHarmony 显示Display驱动全栈解析:DisplayLayer + Gralloc + Gfx 三位一体,打造高性能图形底座

OpenHarmony Display显示驱动模块是系统图形渲染和显示功能的基础组件,负责管理显示设备、图层渲染、内存分配等核心功能。该模块采用HDI(Hardware Driver Interface)设计架构,为上层图形服务提供统一的显示能力接口,实现了显示设备的初始化、图层管理、内存分配与映射、硬件加速等关键功能。DisplayLayer:负责显示图层的管理, 包括图层创建、显示属性设置、图层填充及刷新等操作;

m0_67505153的博客 315

C/C++不定参数

在C++中,我们就可以使用template来定义一个可变模版参数,最终通过可变模版参数来解决问题,其实他也是运用的递归的原理,递归的去对每一个参数进行调用,我们在这儿定义一个空的xprintf的作用就在于最后递归调用过去为空时就会发生一些问题,所以我们在这儿就定义一个空的调用,调用到最后打印一个换行符就可以了。当然,上面这一段代码是针对于某个特定的类型来说的,如果我们需要打印的是字符串的话,就需要使用到我们的vasprintf函数。它的作用是初始化一个。类型的变量和可变参数的最后一个固定参数的地址。

2303_77100822的博客 1610

【OD统一考试(C卷)考生抽中题】符号运算(200 分),用 C++ 编码,速通

3. 结果为整数或分数, 分数必须化为最简格式(比如 6, 3/4, 7/8, 90/7)参加华为 od 机试,一定要注意不要完全背诵代码,需要理解之后模仿写出,通过率才会高。字符串格式的表达式,仅支持±*/,数字可能超过两位,可能带有空格,没有负数。4. 除数可能为 0,如果遇到这种情况,直接输出"ERROR"1. 所有的输入数字皆为正整数(包括 0)用例的输入一定合法, 不会出现括号不匹配的情况。结果可能是负数, 负号放在最前面。表达式结果,以最简格式表达。长度小于 200 个字符。

梦想橡皮擦,专栏100例写作模式先行者,现象级专栏 《Python 爬虫 100 例》作者、《滚雪球学 Python 专栏》原创者 1764

2019.10.28C++学习笔记——不定参数函数方法VA_LIST

C++学习笔记——不定参数函数方法VA_LIST

CQ的学习笔记 668

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

C/C++ 不定参函数

不定参函数、ofstream、ifstream

gma999的博客 1412

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

C/C++不定参函数

在学习C语言的时候,往往使用printf进行打印,其中printf函数就是一个不定参的函数,在这个函数内部可以根据格式化字符串中格式化的字符,分别获取不同的参数进行数据的格式化。这里对这类不定参的使用简要做出小结。

Kai的学习笔记 1379

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

C++ 参数可变函数

前几天突然想到,C++中有关不定参数的函数平时没有用过,查了一下该怎么写,记录下来以免以后忘记。 int Sum(int count, ...) { int sum = 0; va_list args; va_start(args, count); for (int i=0; i&lt;count; ++i) { sum += va_arg...

gdizcm的专栏 299

不定参数的函数实现方式

前言 不定参数的函数实现,在c/c++里面,主要依靠<stdarg.h>里面的va_list,va_start,va_end。掌握了这三个内容的应用,基本可以写出不定参数的函数了 举例 void fun(const char* format,...) { char buf[4 + 1] = {0}; strncpy_s(buf, "info", 5); va_list x...

Aodongq1n的进击路 349

C++设置不定参数方法 简单示例

//输出不定参数,默认为int // params_count :参数个数: bool PrintParams(int params_count,...) { if (params_count < 0) { return 0; } //设置不定参数的类型 va_list args_ptr; va_start(args_ptr,params_count); //设置补丁参数类型...

MusicMan 1087

可以接收数量不定的参数的函数

#include <iostream> #include <cstdarg> int sum(int count, ...) {//接收数量不定的参数 if (count <= 0) return 0; va_list argList; va_start(argList, count); ...

weixin_30276935的博客 241

C++中不定参数的函数实现

#include void appart(int a,...) {  va_list va;  va_start(va,a);  while (a--)  {   char* name = va_arg(va,char*);   int year = va_arg(va,int);   cout  }  va_end(va); } int _tmain(int argc

yhhwatl的专栏 1424

C/C++不定参函数使用

上面的参数args前面有省略号,所以它就是一个可变模版参数,我们把带省略号的参数称为“参数包”,它里面包含了0到N(N>=0)个模版参数。我们无法直接获取参数包args中的每个参数的,只能通过展开参数包的方式来获取参数包中的每个参数,这是使用可变模版参数的一个主要特点,也是最大的难点,即如何展开可变模版参数。由于语法不支持使用args[i]这样方式获取可变参数,所以我们的用一些奇招来一一获取参数包的值。其中,strp是一个指向char指针的指针,用于存储格式化后的字符串的地址;例:写一个自己的打印函数。

m0_70289867的博客 816

c++中多参数

c++中多参数 #include #include "stdlib.h" #include "stdarg.h" //c标准函数库的头文件,主要的内容是让函数能接收可变数量参数 using namespace std; /** 说明:计算所有可变参数的和*/ int sum(int count, ...) { //注意点,左边起必须起码有一个

蔡曜镫专栏 2915

C++程序设计语言练习7.3 函数不定个数参数的写法和多参数处理接口

函数不定参数个数

armor51的专栏 470

[zz]c++可变参数函数使用

/* va_list vl; //定义一个指向参数列表的变量(一个...指针) va_start(vl,first_param); //把指向参数列表的变量初始化 va_arg(vl,mode); //获取下一个参数,参数类型由第二个参数指定,第二个参数用于在va_arg内部进行尺寸计算,以便找到下一个参数 va_end(vl); //结束 */ #include &lt;iost...

weixin_34184158的博客 147

C/C++不定参技术深度解析:从宏函数到可变参数模板的实战指南

在C/C++编程中,函数参数处理是基础且关键的技术环节。其核心原理在于函数调用时参数的传递与访问机制,传统固定参数函数在需要处理动态数量参数时显得力不从心。不定参技术的技术价值在于极大提升了代码的灵活性与可复用性,允许开发者创建能够适应不同调用场景的通用接口。这一特性在日志系统、调试工具、泛型容器和格式化输出等应用场景中尤为重要,例如实现类似printf的格式化输出或创建灵活的日志宏。本文聚焦于C/C++中两种核心的不定参实现方式:不定参宏函数和不定参函数,通过对比分析它们在类型安全、性能开销和应用场景上的

weixin_30899023的博客 249
上一篇: placement new的作用
下一篇: 字符串分解函数
小金先生
博客等级 码龄20年 18粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值