//用可变参数列表实现printf函数
#include
#include
void my_printf(const char *str,...)
{
va_list fun;
va_start (fun,str);
while(*str!=0)
{
if(*str=='c')
{
putchar(va_arg(fun,char ));
}
if(*str=='s...
分类:
编程语言 时间:
2015-04-06 17:18:05
阅读次数:
171
再c++里有函数重载,在c里有可变参数列表,用stdarg宏实现定义在的头文件中,其中有3个宏:va_start(va_list的变量名,省略号前最后一个有名字的参数)用于初始化,va_arg(va_list的变量名,可变参数类型)用于取出可变参数,va_end(va_list的变量名)用于表明结束取值,用va_list声明一个类型为va_list的变量如arg
#include
#includ...
分类:
其他好文 时间:
2015-03-12 19:18:14
阅读次数:
109
在定义可变參数的函数之前,先来理解一下函数參数的传递原理:1、函数參数是以栈这样的数据结构来存取的,在函数參数列表中,从右至左依次入栈。2、參数的内存存放格式:參数的内存地址存放在内存的堆栈段中,在运行函数的时候,从最后一个(最右边)參数開始入栈。因此栈底高地址,栈顶低地址,举个样例说明一下:voi...
分类:
编程语言 时间:
2015-02-28 20:08:41
阅读次数:
182
#include
//#include
//#include
//int sum(int n, ...);
typedef void* va_list;
#define _INTSIZEOF(arg) ((sizeof(arg) + sizeof(int) - 1)&(~(sizeof(int) - 1))) //字节对齐,针对32位系统
#define va_start(arg,...
分类:
其他好文 时间:
2015-01-31 21:55:54
阅读次数:
159
在C语言的stdarg.h头文件中提供了三个函数va_start, va_end,va_arg和一个类型va_list。利用它们,我们可以很容易实现一个可变参数的函数。首先简单介绍一下这三个函数。假设现在有一个名为f的函数,其函数定义为:void f(int a, int b, ...)那么,在函数...
分类:
编程语言 时间:
2015-01-23 12:45:19
阅读次数:
200
函数参数的传递原理
函数参数在内存中是以栈的形式存取,从右至左入栈。
参数在内存中存放格式:
在进程中,堆栈地址是从高到低分配的。当执行一个函数的时候,将参数列表入栈,压入堆栈的高地址部分,然后入栈函数的返回地址,接着入栈函数的执行代码,这个入栈过程,堆栈地址不断递减。
总之,函数在堆栈中的分布情况是,地址从高到低,依次是:函数参数列表,函数返回地址,函数执...
分类:
编程语言 时间:
2015-01-21 15:13:50
阅读次数:
235
可变参数给编程带来了很大的方便,在享受它带来的方便的同时,很有必要了解一下其实现方式,在了解编程语言的同时,也可以扩展编程的思路。可变参数需要用到3个宏函数和一个类型,他们都定义在中,分别是:va_start(vl)va_arg(vl, type)va_end(vl)其中vl是va_list类型,t...
分类:
编程语言 时间:
2015-01-19 00:03:35
阅读次数:
326
引言 最近无聊看了看征服C指针,看到函数的不定参数时想起在这方面还没有做过一些总结,只是略微了解一些,意识到其实完全不需要借用va_list,va_start,va_arg这些标准函数也可以自己实现操作,具体我们来看看。函数栈 首先我们需要了解一下linux下一个进程的内存地址空间是如何布局的,.....
分类:
其他好文 时间:
2015-01-16 19:01:21
阅读次数:
180
我们在C语言编程中会遇到一些参数个数可变的函数,例如printf()这个函数,它的定义是这样的:int printf( const char* format, ...);它除了有一个参数format固定以外,后面跟的参数的个数和类型是可变的,例如我们可以有以下不同的调用方法:printf("%d",...
分类:
其他好文 时间:
2015-01-05 23:25:36
阅读次数:
224
主要涉及函数
va_list ap 声明一个指针
va_start(ap,arg) 将ap指向到最后一个确定的参数arg
va_arg(ap,size) 将ap储存的地址加size,指向下一个参数
va_end(ap) 将ap赋值为NULL
#include
#include
int sum(in...
分类:
编程语言 时间:
2014-12-23 19:32:18
阅读次数:
212