我的C语言可变参数的实现
实现环境:Fedora12 + gcc
任务:用C语言实现一个参数可变的函数,以方便输出。
源代码如下:
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
int sum(int data, ...)
{
int i = data, s = 0;
va_list vl;
va_start(vl, data);
while(i != -1)
{
s += i;
i = va_arg(vl, int);
}
va_end(vl);
return s;
}
char smessage[1024] = {0};
int display(const char *fmt, ...)
{
va_list args;
int n;
va_start(args, fmt);
n = vsprintf(smessage, fmt, args);
va_end(args);
return n;
}
int main()
{
int s = sum(1, 3, 4, 5, -1);
printf("sum = %d\n", s);
int ret = display("Here: %s, %d, %.2f, %s", "hello", 45, 33.6535896, "How do you do");
printf("ret = %s(%d)\n", smessage, ret);
return 0;
}
输出如下:
sum = 13
ret = Here: hello, 45, 33.65, How do you do(37)
关键点还是调用了vsprintf,另外就是要了解va_start(), va_end()以及va_list的使用!
我的C语言可变参数的实现相关推荐
- c语言怎样获得函数内参数的值_C语言可变参数函数的实现原理
在本人的<C语言可变参数函数的实现方法>一文中,介绍了如何建立自己的可变参数函数. 下面继续介绍可变参数函数的实现原理. 在汇编语言程序设计中,详细介绍了子程序的实现思想: (1)子程序只 ...
- C语言可变参数函数_初探
一.什么是可变参数函数 C语言允许定义参数数量可变的函数,这称为可变参数函数(variadic function).这种函数需要固定数量的强制参数,后面是数量可变的可选参数. 其中,强制参数必须至少一 ...
- C语言可变参数函数(printf/scanf)
C 语言允许定义参数数量可变的函数,这称为可变参数函数(variadic function).这种函数需要固定数量的强制参数(mandatory argument),后面是数量可变的可选参数(opti ...
- c语言 可变参数的宏,可变参数的宏__ VA_ARGS__的用法
回顾 在[ANSIC几种特殊的标准定义]中我们讲述了比较常用的几项: __FILE__:正在编译文件的路径及文件名 __LINE__:正在编译文件的行号 __DATE__:编译时刻的日期字符串 如&q ...
- next用法C语言,C语言可变参数的使用
先来个简单的例子:#include #include void test0(int num,...) { va_list ap; va_start(ap, num); while(num--) { p ...
- 参数控制c语言代码走向,C语言可变参数完全解读
本文转自:http://www.cnblogs.com/wangyonghui/archive/2010/07/12/1776068.html 一.是什么 我们学习C语言时最经常使用printf()函 ...
- c 语言 可变参数前要加形参,C/C++中可变参数的用法详细解析
可变参数即表示参数个数可以变化,可多可少,也表示参数的类型也可以变化,可以是int,double还可以是char*,类,结构体等等.可变参数是实现printf(),sprintf()等函数的关键之处, ...
- 关于C语言可变参数函数的一些研究和总结
可变参数函数是指函数参数的个数.类型等是不固定的,需要在用户调用过程中,根据实际传入的参数来确定其类型.个数等信息.例如:可变参数函数printf可谓是在C开发过程中使用最多的标准输出库函数之一,因此 ...
- C语言可变参数函数的使用及相关函数介绍
By qianghaohao(Xqiang) 在C语言中当一个函数参数无法列举出来,或者参数个数 不确定,这时我们将函数声明为可变参数的形式,根据需 要传适当个数的参数.举例如下: int fun ...
- 编写可变参数函数 c语言,C语言可变参数函数的编写
1. 引言 C语言我们接触的第一个库函数是 printf("hello,world!");其参数个数为1个. 然后,我们会接触到诸如: printf("a=%d,b=%s ...
最新文章
- 《Hack与HHVM权威指南》——1.5.2 覆盖方法的类型
- linux图形化卡在开机界面,linux怎么在开机时进入图形界面
- 随机梯度下降(Stochastic gradient descent)和 批量梯度下降(Batch gradient descent )的公式对比、实现对比
- awk使用shell中的变量
- 2017年12月英语四级翻译预测
- 使用bootstrap的dropdown部件时报错:error:Bootstrap dropdown require Popper.js
- 【转】继承过程中 父类子类的 字段方法 内存分配 (非java语言)
- 三万字速通SSM框架入门知识点,快速上手CRUD
- Tell me why -- Declan Galbraith
- Multi-statement transaction required more than ‘max_binlog_cache_size‘ bytes of storage
- 日语学习|如何快速有效地记忆日语五十音图?
- Informatica的元数据和数据血缘关系
- EximiousSoft Logo Designer (Crack)版,轻松设计logo的软件
- 【高项】沟通管理(ITTO)
- 晶联讯LCD(JLX128128G-610-PC)使用教程
- Zhong__PyCharm配置豆瓣源提升插件、依赖安装速度
- 一款最好用的windows文件管理器
- word文档找不到smartart_图文详解Word文档插入SmartArt图形的方法
- 小程序源码:可以刷短视频的去水印工具微信小程序
- echo命令详解 (二)
热门文章
- Md5 Md5实现原理
- explorer.exe被删除了怎么办?
- 高斯金字塔 拉普拉斯金字塔_金字塔学入门指南
- leetcode 406. 根据身高重建队列(贪心算法)
- leetcode50. Pow(x, n)(快速幂)
- 如何设置Windows版Go —快速简便的指南
- 2016版单词的减法_在2016年最大的电影中,女性只说了27%的单词。
- js值的拷贝和值的引用_到达P值的底部:直观的解释
- mongodb数据可视化_使用MongoDB实时可视化开放数据
- dt决策树_决策树:构建DT的分步方法