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语言中变长参数类型
- C语言 内存分配 地址 指针 数组 参数 实例解析
- 20161225C语言项目03_函数参数错误实例
- 20161225C语言项目03_函数参数错误实例
- 20161225C语言项目03_函数参数错误实例
- C语言辅导:不定参数在C语言中的应用实例
- 基于proteus的51单片机仿真实例三十七、C语言的函数参数传递
- 20161225C语言项目03_函数参数错误实例
- 20161225C语言项目03_函数参数错误实例
- 20161225C语言项目03_函数参数错误实例
- 【嵌入式开发】C语言 内存分配 地址 指针 数组 参数 实例解析
- C语言 内存分配 地址 指针 数组 参数 实例解析
- C语言 内存分配 地址 指针 数组 参数 实例解析 (C语言复习)
- 20161225C语言项目03_函数参数错误实例
- C语言 内存分配 地址 指针 数组 参数 实例解析
- 不定参数在C语言中的应用实例
- C语言 内存分配 地址 指针 数组 参数 实例解析
- C语言 内存分配 地址 指针 数组 参数 实例解析
- c语言getopt解析命令行参数实例包括长参数与短参数
- C语言中函数参数的入栈顺序详解及实例