//
// main.c
// 自定义多参数函数
//
// Created by MacroHong on 14-2-19.
// Copyright (c) 2014年 Macro. All rights reserved.
//
#include <stdio.h>
//#include <stdarg.h>
//#include <limits.h>
/**
* 求不定个参数的和
*
* @param count 不定参数的个数
* @param ... 不定参数的列表
*
* @return 返回不定参数列表的和
*/
int sum(int count, ...) {
int sum = 0;
int i = 0;
__builtin_va_list vaptr;//相当于一种指针
__builtin_va_start(vaptr, count);//指向某块内存地址
for (i = 0; i < count; i++) {
sum += __builtin_va_arg(vaptr, int);//将指针指向的内存数据转换成指定数据类型
}
__builtin_va_end(vaptr);//指针归零
return sum;
}
/**
* 求不定个参数的和
*
* @param count 不定参数的个数
* @param ... 不定参数的列表
*
* @return 返回不定参数列表的和
*/
double sumDouble(int cnt, ...) {
double sum = 0.0;
int i = 0;
__builtin_va_list vaptr;
__builtin_va_start(vaptr, cnt);
for (i = 0; i < cnt; i++) {
sum += __builtin_va_arg(vaptr, double);
}
return sum;
}
/**
* 打印指定多个字符串
*
* @param cnt 字符串个数
* @param ... 字符串列表
*/
void printStrings(const int cnt, ...) {
int i = 0;
__builtin_va_list vaptr;//定义一个指针型变量
__builtin_va_start(vaptr, cnt);//将变量赋值
for (i = 0; i < cnt; i++) {
printf("%s ", __builtin_va_arg(vaptr, char *));//指针指向的数据转换成指定数据类型
//vprintf("%s ", vaptr);//和上一行只要一行
}
printf("\n");
__builtin_va_end(vaptr);//指针归零
}
int main(int argc, const char * argv[])
{
//打印字符串
printStrings(4, "My", "name", "is", "Macro!!!!!");
//求int型数据和
int ret = sum(6, 1,2,3,4,5,6);
printf("%d\n", ret);
//求double型数据和
printf("%g\n", sumDouble(4, 1.2, 4.3, 2.1, 6.7));
return 0;
}
相关推荐
算法系列之十二:多边形区域填充算法--几种边标志填充算法
四、边界标志填充算法 在光栅显示平面上,多边形是封闭的,它是用某一边界色围成的一个闭合区域,填充是逐行进行的,即用扫描线逐行对多边形求交,在交点对之间填充。边界标志填充算法就是在逐行处理时,利用边界或边界颜色作为标志来进行填充的。准确地说,边界标志填充算法不是指某种具体的填充算法,而是一类利用扫描线连贯性思想的填充算法的总称。这类算法有很多种,本篇就介绍几种。 首先介绍一种以边为中心的边缘填充...
AArch64中va_list/va_start/va_arg/...的实现
一、背景[3] 1. 可变参函数 可变参函数指的是一个可以接受可变个参数的函数, 调用此函数时只有caller知道为此函数传入了多少个参数, 可变参函数callee只知道caller最少传入了多少个参数: callee中可以确定的参数称为命名参数(Named arguments) callee中不确定的参数称为匿名参数(Anonymous arguments) 对于可变参函数(callee), 其需要: 在其函数栈中预留空间存储所有可能的匿名寄存器参数(否则由于不确定传入了多少个寄存器参数,不.
DFRobot MGC3130电容式手势传感器库深度解析
电容式近场感应(Electric Near Field Sensing)是一种非接触、抗干扰的三维空间感知技术,其原理基于人体介电特性对高频电场的扰动响应,具备低功耗、高鲁棒性与零物理接触等核心优势。该技术广泛应用于医疗人机交互、工业HMI、智能家电等对可靠性与环境适应性要求严苛的嵌入式场景。DFRobot_MGC3130库正是面向Microchip MGC3130芯片的工程化实现,封装了I²C驱动、ASU硬件加速调度及多层抽象API,支持手势识别、触控检测与接近唤醒等功能动态切换。结合电容式近场感应与嵌入
C语言可变参数及其原理
在刚学C没多久的时候,我一直有这么个疑问: printf这个函数是怎么做到可以处理不同数量的参数的?在初学C的时候,根本就没有遇到过(事实上程序设计课也没讲过)。 我们追踪一下printf的实现: 这里用到了__builtin_va_list,__builtin_va_start,__builtin_va_end,在中间调用了__mingw_vprintf函数,把类型为__builtin_va_list的__local_argv和第一个参数__format传了进去……然后就不明所以了。 所幸我找到了一份
6、基于集成学习技术的边坡稳定性预测及滑坡易发性研究
本研究基于集成学习技术对云阳县的边坡稳定性及滑坡易发性进行预测分析。通过比较SVM、RF、XGBoost和LR四种模型,发现集成学习模型在准确率和少数类识别方面表现更优。特征重要性分析表明剖面形状是影响边坡稳定性的关键因素。同时,引入基于定性分析的分区建模方法,构建父模型与子区域模型,提升了滑坡易发性制图的精度。研究成果为地质灾害的预防与管理提供了科学依据和技术支持。
【车载以太网】【SOMEIP】Wireshark测试someip
一、 Wireshark SOMEIP plugin 1.1 插件安装 Wireshark插件目录:Help -> About Wireshark -> Folders/Pluginshttps://github.com/jamores/eth-ws-someip 解压后,将所有后缀是lua的文件拷贝到Wireshark安装目录plugins/2.4.10/下。 1.2时间戳调整为UTC显示格式 View -> Time Display Format -> Date and Tim.
C语言如何实现多参数函数
也就是c语言如何实现变长参数。 int printf(const char* format, ...); 调用惯例,参数从右到左入栈,具名参数format(称之为lastarg),在进程虚拟内存空间栈的顶端,即小地址端(栈是从大地址到小地址增长的。) 使用方式: va_list ap;//定义一个变量, 一个指针。用来指向各个不定参数。类型为 void* 或 char* va_start...
Arcgis中的模型构建器技术之按属性批量建库并对应输出
好久没更新了,之前我们已经介绍过四至点提取模型,前两天有同事问怎么样按属性批量建数据库并对应输出相关图斑。比如将一个县的永农数据按乡镇建立数据库并将对应乡镇的永农数据输出到相应的数据库里。今天就介绍一下相关的模型构建过程。
从main函数参数,printf多参数来了解C语言可变参数函数
一般在C语言中,我们使用的main函数都是不带参数的,但实际上main函数是可以带参数的。 C语言规定main函数的参数只能有两个,习惯上这两个参数写为argc和argv。因此,main函数的函数头可写为: main (argc,argv) C语言还规定argc(第一个形参)必须是整型变量,argv(第二个形参)必须是指向字符串的指针数组。加上形参说明后,main函数的函数头应写为: int main(int argc, char** argv) 或int main(int argc, char* ar.
【Python音频处理】syncstart 计算媒体文件同步时间偏移
syncstart是一个强大的工具,它简化了多媒体文件的音视频同步过程,特别适用于多设备录制的媒体内容。在使用命令行工具时,可以根据实际需求灵活调整参数,如归一化、降噪、低通滤波等,以提高同步的精度和效率。通过本文介绍的基本操作和应用示例,可以快速掌握syncstart的使用方法,并将其应用到日常的音视频处理工作中。
23、管状剪纸结构的研究与功能生成连杆机构的综合设计
本文研究了管状剪纸结构的压缩运动特性,通过剪纸技术将非刚性可折叠的Yoshimura和Kresling折纸结构转化为刚性可折叠结构,并提出径向可闭合剪纸(RC-kiri)构型。推导了位移与折叠角之间的数学关系,设计了带外部LET接头的RC-kiri模型,建立了力-位移理论模型并通过Abaqus进行有限元验证,制作了3D打印物理模型以测量直径变化。同时,研究了四杆和六杆功能生成连杆机构的综合设计方法,基于负闭合运动链和最小二乘法实现函数生成。结果表明理论、仿真与实验整体吻合良好,误差来源得到分析,为机器人、机
__builtin_va_list,三个点,可变参数
今天看到个有趣的代码 看懵了,函数模板我知道,那三个点是啥玩意? “…” template < typename T, typename... Types> void print(const T& firstArg, const Types&... args) {.......} 万能Google 其实不用管他,那三个点也就是参数 但是有多少个参数?不知道,未定 啥类型的参数?不知道,未定 可变参数 例如: void test01(…); void test01(int …);
【LLC快速上手系列】LLC轻载时:开关频率 + 死区时间 联合优化!
轻载优化,频率别飞天,死区要有耐心。两手一起抓,效率高到笑。😎。
C/C++:类型转换
char、short、int、double 全部都是纯数值类型,底层都是二进制存数,用途都是运算、赋值、传参,属性高度统一。:不同类型能够发生隐式转换,不是随机行为,必须满足同一个条件:底层二进制存储结构相似、数据用途一致。2、内置类型转类:靠单参构造,逻辑上分两步:构造临时对象 + 拷贝构造,编译器会优化为直接构造。:只要类型相似,编译器自动完成类型对齐、自动补齐位数、自动适配精度,不需要手动强转。1、C 语言隐式转换核心:类型底层存储、用途相似,编译器自动转换,C++ 完全兼容。
lwip-2.0.3
lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。
win10 跳过U8环境检测的IE WebControls.rar
win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。
三、max 的使用
摘要:本文介绍了C/C++中max函数的使用注意事项。在C语言中,使用max需包含<algorithm>头文件,且比较参数类型必须相同,否则会报错;多值比较需嵌套调用。C++的std::max更灵活:支持隐式类型转换的不同参数比较,可通过initializer_list一次比较多个值,还提供带自定义比较器的三参数版本(比较两个对象)。文中通过代码示例说明了各种用法和常见错误。
蓝牙模块HM-10手册
蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。
手把手教你实现 C 语言的函数多参默认值 「上」
自从上一篇关于 C 语言单个参数函数的默认值实现《C语言函数也可以给形参添加默认值?》发表以来,有很多的同学反馈想知道多参数函数的默认值又该如何实现,今天特地整理相关代码和实现思路说明如下。
C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片
基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正
object-c 多参数方法
一直被Object多参数方法迷惑,这下总算搞清楚了!!!lady gaga!!!!! 1.应该这么理解方法定义: -(void) setWord1:(NSString *) word1 setWord2:(NSString *) word2 “setWord1:setWord2:”是方法名,word1和word2是参数名。你所谓的参数2的名称(setWord2)其实是方法名的一部分,而不是参
c 语言多参数函数,C/C++实现多参数函数编程
在C/C++中,我们经常会需要实现类似printf这样的函数,即函数的参数个数是不定的,这个时候就需要用到我们这篇文章讲到的方法啦。首先,我们要知道这种函数,如何来定义。比如我想实现一个函数能够支持 fun(“%d”,1);那么这个函数的定义实际上如下:voidfun(constchar*fmt, …);其中…的意思是说参数无法一一列出,所以用…代替,至于怎么解,我们稍后再说。比较特殊的一点...
Object-C中编写省略参数的多参数函数
Object-C中编写省略参数的多参数函数 引语: 在Object-C中,我们会遇到很多像NSLog这样的函数,其中参数的个数不确定,由程序员自由控制,在初始化数组,字典等方面应用广泛,那么,这类的函数是如何实现的呢?我们怎么编写我们自己的省略参数的函数呢?当然,这不是唯一的多参函数的处理方法,你也可以通过一个字典或者数组传递参数。但C为我们提供的这样的一种机制,无疑是最方便的
C语言变参数函数详解
文章目录一、前言二、printf函数源码三、C语言函数调用堆栈过程调用约定压栈过程那么再来看看其他情况四、C语言实现可变参数详解五、需要关注的一些问题 一、前言 在C语言中,我们不管是使用标准库函数还是使用自定义的函数,我们都需要注意函数参数的匹配,参数的匹配包括参数类型的匹配和参数个数的匹配,参数不匹配就会导致调用函数错误。 二、printf函数源码 但是在C语言中还提供了一种变参数函数。下面我们以printf函数为例来说明一下。 可以参考一下之前写过的一篇博客:从main函数参数,printf多参数来了
手把手教你实现 C 语言的函数多参默认值 「下」
自从上一篇关于 C 语言单个参数函数的默认值实现《C语言函数也可以给形参添加默认值?》发表以来,有很多的同学反馈想知道多参数函数的默认值又该如何实现,今天特地整理相关代码和实现思路说明如下。
c语言多参数函数写法
#include"stdio.h" ////多参数//////////////// long sum(int i,...) { int *p,j; long s = 0; p = &i+1; for (j=0;j s += p[j]; return s; } void main() { long Sum = sum(3,1,2,3); printf("
C语言多参数的传递和返回
C语言中的函数参数可以多个传递,但是只能一个返回的问题,运用指针和地址的方式解决
用函数判断日期是否合法C语言实现
日期判断是一个非常常见的题目类型,日期合法判断也是一个经典多参数函数的例题。 Description 编写函数,判断一个日期(年-月-日)是否合法;如果合法,则返回1;如果月份不合法, 则返回-1;如果日子不合法,则返回-2。程序中判断年份是否为闰年的功能也用函数实现。(主函数代码部分已经写好,只需写函数部分,如果提交的不是c语言则需要提交全部代码) Output 判断这个日期(年-月-日)是否合法;如果合法,则返回1;如果月份不合法,则返回-1;如果月份合法且日子不合法,则返回-2,月份和日子都不合法,则
c语言自定义函数多个参数,printf是如何实现可变参数的?自定义函数能否实现参数可变?【C语言】...
序在我们使用C语言的printf和scanf函数时,是否有好奇过它到底是怎么实现参数任意多的呢?(开始以为是系统自带的,有无小伙伴一起的2333)好奇心驱使下,终于了解到具体的实现方法接下来就一起一步一步揭秘吧 ohhh!!# 首先进行比较简单的可变参数自定义函数代码先挂上:#include#includevoid myPrintf(int n, ...){int i;va_list val;va...
1898



被折叠的 条评论
为什么被折叠?



