您的位置:首页 > 编程语言 > C语言/C++

C语言中变长参数实例

2014-12-16 14:47 295 查看
#include <stdarg.h>
#include <stdio.h>

#define SUM(arg...) sum("My name is", ##arg)

char *sum(char *a, ...);

/*******************/
/*
* 变长参数的实现基于的是
* C 语言默认的 cdecl 调用惯例中
* 自右向左压栈的传递方式
* 比如 sum(a, b, c) 的各个参数在
* 栈中的相对顺序为
----------------------
|    Top of Stack    |
----------------------
|       ...          |
----------------------
|        c           |
----------------------
|        b           |
----------------------
|        a           |
----------------------
|       ...          |
----------------------

其中变长参数用到的几个宏的定义如下:

#define va_list char*
#define va_start(ap, arg) (ap=(va_list)&arg+sizeof(arg))
#define va_arg(ap,t) (*(t*)((ap+=sizeof(t))-sizeof(t)))
#define va_end (va=(va_list)0)

*/
/*******************/

char *sum(char *a, ...)
{
// 定义类型为 va_list 的变量
va_list ap;

// 初始化 va_list
va_start(ap, a);

char *b = va_arg(ap, char *);
char *c = va_arg(ap, char *);

va_end(ap);

return c;
}

int main(int argc, char* argv[])
{
printf("%s\n", SUM(argv[1], argv[2]));
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C 变长参数