C语言使用函数参数传递中的省略号:va_list, va_start, va_arg, va_end
首先要处理这种省略号的参数的话,需要包含头文件#include <stdarg.h>,然后利用下面的函数对“...”省略号变量进行处理。
va_list arg;
type va_arg( va_list arg, type );
void va_end( va_list arg );
void va_start( va_list arg, prev_param );
下面实现一个自己的print(),它的参数的传递是根据具体输入的个数决定的。如下:
void print(char *msg, ...)
{char *p = msg;va_list arg;va_start(arg, msg);int _i;char _c;char * _s;while(*p != '\0'){switch(*p){case '%':p++;switch(*p){case 'd':_i = va_arg(arg, int);printf("%d", _i);break;case 'c':_c = va_arg(arg, int);printf("%c", _c);break;case 's':_s = va_arg(arg, char*);printf("%s", _s);break;default:break;}break;default:printf("%c", *p);break;}p++;}va_end(arg);
}
使用过程:
print("Hello %d, %s\n", 12, "World\n");
给出我的输出:
$ gcc main.c
$ ./a
Hello 12, World
当然这只是最简单的实现,实际的处理过程要比这复杂得多。仅供学习参考!!
给出完整的代码:
#include <stdio.h>
#include <stdarg.h>
#include <stdlib.h>void print(char *msg, ...)
{char *p = msg;va_list arg;va_start(arg, msg);int _i;char _c;char * _s;while(*p != '\0'){switch(*p){case '%':p++;switch(*p){case 'd':_i = va_arg(arg, int);printf("%d", _i);break;case 'c':_c = va_arg(arg, int);printf("%c", _c);break;case 's':_s = va_arg(arg, char*);printf("%s", _s);break;default:break;}break;default:printf("%c", *p);break;}p++;}va_end(arg);
}int main(int argc, char **argv)
{print("Hello %d, %s\n", 12, "World\n");return 0;
}
C语言使用函数参数传递中的省略号:va_list, va_start, va_arg, va_end相关推荐
- 如何获取函数的变长参数(va_list, va_start, va_arg, va_end)
最近在花时间研读C++. 函数这章讲到了函数的变长参数(ellipsis...),但是primer中讲得比较浅,提到了怎么声明怎么调用,但是没有写明在函数内部是如何获取变长的参数的. 1)省略号(el ...
- C语言——printf()函数参数传递问题
C语言--printf( ) 函数参数传递问题 一.参数说明 printf() 函数是输出函数,可以实现和用户之间的交流,该函数的参数由两部分组成,即格式化字符串.待打印项 0-n 项,函数的格式如下 ...
- 函数参数中带省略号的用法
[转]函数参数中带省略号的用法 本文摘自CDSN<可变参数学习笔记>,原帖链接:http://topic.csdn.net/t/20041124/09/3582660.html 前言 ...
- (C++)函数参数传递中的一级指针和二级指针
主要内容: 1.一级指针和二级指针 2.函数指针传递的例子 3.什么时候需要传递二级指针? 4.二级指针在链表中的使用 1.一级指针和二级指针 一级指针:即我们一般说的指针,就是内存地址; 二级指针: ...
- r语言barplot函数图中加标签_R语言中绘制条形图的简单方法
原标题:R语言中绘制条形图的简单方法 条形图(bar chart)是用宽度相同的条形的高度或长短来表示数据多少的图形.它主要用来展示不同分类(横轴)下某个数值型变量(纵轴)的取值.在实际中,条形图主要 ...
- c++语言swap函数,C++中swap函数
本文是我用到swap函数时,对其产生好奇,所以结合网上有关博文写下的.个人水平有限,若有错误的地方,欢迎留言指出.谢谢! 一.通用的函数交换模板 template void swap(T &a ...
- 在C语言的函数定义中 如果不需要返回结果,在C语言的函数定义中,如果不需要返回结果,就可以省略return语句...
语言义中语句 数定省略保险般来能一几项的职以下说有. 来源统计济数据的主要调查得社会经是获,需要包括如下容(的内应该. 具体是指,结果积反映房空置面商品,而尚未出屋期末报告工可供销的房出租出租已竣是指 ...
- c语言延时函数delay_STM32中精确延时函数的实现
在与传感器或者模块的总线进行通信的时候,常常需要使用到精确延时,一般我们会封装几个常用延时函数,下面我们以STM32F103芯片为例,详细介绍一下STM32下一种精确延时函数的实现: 时钟树 下图中紫 ...
- C语言bound函数,C++中lower_bound函数和upper_bound函数
STL中关于二分查找的函数有三个lower_bound .upper_bound .binary_search .这三个函数都运用于有序区间(当然这也是运用二分查找的前提),下面记录一下这两个函数. ...
最新文章
- 计算机视觉:Bag of words算法实现图像识别与搜索
- Java中常见的异常
- SQL Server 2005 用户自定义函数
- kindle刷多看系统_疑问解答 | kindle真的能护眼吗?
- pymc3使用_使用PyMC3了解飞机事故趋势
- 抽象类和接口的共同点和区别
- C语言局部变量、全局变量、静态局部变量、静态全局变量
- 如何获取变量token的值
- 数据结构题集(C语言版 清华大学出版社)
- i4助手linux,爱思i4助手刷机教程
- 使用python破解zip、rar压缩包密码
- 二维数组—小学二年级班级座位表
- without updating pid file
- DGIOT物联网平台简介
- 2021年CCPC网络预选赛重赛补题
- 【python】如何下载漫画章节随时看?漫迷们不容错过哦
- 客制化PO单据模板(实例)
- PHP 常用英语精简1
- 用VC++6.0制作简易浏览器(转)
- 长城皮卡品牌CEO张昊保:皮卡是一个独特的品类,想玩门槛很高
热门文章
- leetcode题解15-三数之和(双指针经典)
- 聊聊区块链,虽然我不挖矿!
- 一站式WPF--依赖属性(DependencyProperty)
- 最简单 NDK 样例
- .NET Compact Framework.代码展开ComboBox下拉选项
- Sql server2005中如何格式化时间日期
- 3-Spring Boot的数据访问
- 简述php和web交互过程,PHP与Web页面交互操作实例分析
- python类的命名空间_Python之关于类变量的两种赋值区别详解
- idea卸载不干净怎么办_家里拖地老是不干净怎么办,来跟我学!