va_list(),va_start()
(一)写一个简单的可变参数的C函数
下面我们来探讨如何写一个简单的可变参数的C函数.写可变参数的 type va_arg( va_list arg_ptr, type ); void va_end( va_list arg_ptr ); va_start(arg_ptr, i); (二)可变参数在编译器中的处理 我们知道va_start,va_arg,va_end是在stdarg.h中被定义成宏的, typedef char * va_list; #define _INTSIZEOF(n) / #define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) ) #define va_arg(ap,t) / #define va_end(ap) ( ap = (va_list)0 ) 定义_INTSIZEOF(n)主要是为了某些需要内存的对齐的系统.C语言的函 高地址|-----------------------------| 然后,我们用va_arg()取得类型t的可变参数值,以上例为int型为例,我 高地址|-----------------------------| 最后要说的是va_end宏的意思,x86平台定义为ap=(char*)0;使ap不再 (三)可变参数在编程中要注意的问题 因为va_start, va_arg, va_end等定义成宏,所以它显得很愚蠢, va_start(arg_ptr, i); |
转载地址:http://hi.baidu.com/wangjianzhong1981/blog/item/f41e10cb7ca9dff553664f5b.html
va_list(),va_start()相关推荐
- va_list/va_start/va_arg/va_end深入分析
va_list/va_start/va_arg/va_end这几个宏,都是用于函数的可变参数的. 我们来看看在vs2008中,它们是怎么定义的: 1: ///stdarg.h 2: #define v ...
- va_list/va_start/va_end的使用
va_list 键入以保存有关变量参数的信息 va_start 初始化变量参数列表 初始化ap以检索参数paramN后面的附加参数. 调用va_start的函数在返回之前也应调用va_end. 参数不 ...
- 变长参数va_list va_start va_arg va_end
对于int printf(const char *format, ...);这种变长参数,需要使用va_list va_start va_end va_arg来访问参数. 下面是一个tutorials ...
- va_list va_start va_end的使用
<pre name="code" class="cpp" style="color: rgb(51, 51, 51); white-space: ...
- C语言使用函数参数传递中的省略号:va_list, va_start, va_arg, va_end
首先要处理这种省略号的参数的话,需要包含头文件#include <stdarg.h>,然后利用下面的函数对"..."省略号变量进行处理. va_list arg; ty ...
- 如何获取函数的变长参数(va_list, va_start, va_arg, va_end)
最近在花时间研读C++. 函数这章讲到了函数的变长参数(ellipsis...),但是primer中讲得比较浅,提到了怎么声明怎么调用,但是没有写明在函数内部是如何获取变长的参数的. 1)省略号(el ...
- 对va_list; va_start ; va_end ;vsprintf理解(转)
以下为转载内容: 1 int printf(const char* fmt, ...) 2 { 3 va_list args; 4 int i; 5 //1.将变参转化为字符串 6 va_start( ...
- 可变参C API va_list,va_start,va_arg_va_end以及c++可变参模板
文章目录 C变参API C变参API函数原型 C变参API实现源码 C变参API应用实例 C 变参函数缺点 C++变参实现 方法 initializer_list 形参 可变参数模板 C变参API C ...
- Va_list Va_start va_arg Va_end 的用法
首先我们先看看它的头文件是怎么描述的 stdarg.h #pragma once#ifndef _INC_STDARG #define _INC_STDARG#if !defined(_WIN32) ...
最新文章
- 如何用node开发自己的cli工具
- oracle: to_char,to_date
- php做一个微信退款,PHP实现微信退款功能
- Exam化的软件项目管理
- 如何使用Git上传项目代码到github
- 一加9硬件规格全曝光:120Hz流体屏+双重快充
- 做海外市场,如何在Facebook20多亿用户中分一杯羹?
- 一个页面多个ajax统一loading,页面有多个向后台发送的请求加载过程中显示loading,加载完成loading消失...
- Android okHttp网络请求之缓存控制Cache-Control
- php伪静态之APACHE配置篇
- windows制作docker镜像_.NET Core程序跑在任何有docker的地方
- WordPress百度熊掌号页面改造(纯代码实现)
- matplotlib如何绘制两点间连线_python matplotlib 如何画点 而不要画点之间的连线?...
- [AHK]AutoHotKey 快速下单脚本,支持东方财富,大智慧,通达信,同花顺
- cisco2811(Cisco2811 DHCP)
- win2008r2 惠普g160鼠标_惠普M260鼠标驱动简单体验
- BoundsChecker
- 武汉为什么进不了互联网第一梯队?
- Ps制作的立体字效果
- mac pro M1(ARM)安装:ubuntu虚拟机(四)