va_start、va_arg、va_end分析
来源:互联网 发布:淘宝 大类目小类目 编辑:程序博客网 时间:2024/05/01 00:25
acenv.h中有:
#ifndef va_arg#ifndef _VALIST#define _VALISTtypedef char *va_list;#endif/* _VALIST *//* * Storage alignment properties */#define _AUPBND (sizeof (acpi_native_int) - 1)#define _ADNBND (sizeof (acpi_native_int) - 1)/* * Variable argument list macro definitions */#define _bnd(X, bnd) (((sizeof (X)) + (bnd)) & (~(bnd)))#define va_arg(ap, T) (*(T *)(((ap) += (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND))))#define va_end(ap) (void) 0#define va_start(ap, A) (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND))))#endif/* va_arg */
网上找到的2个例子:
//vstart.c #include <stdio.h> #include <strings.h> #include <stdarg.h> int demo(char *fmt, ...); int main() { demo("DEMO", "This", "is", "a", "demo!", ""); return 0; } int demo( char *fmt, ... ) { va_list argp; int argno = 0; char *para; va_start(argp, fmt); while (1) { para = va_arg(argp, char *); if (strcmp( para, "") == 0) break; printf("Parameter #%d is: %s/n", argno, para); argno++; } va_end( argp ); return 0; }
#include <stdio.h> #include <stdarg.h> #include <string.h> int foo(char *fmt, ...); int main() { char *a = "ast"; int b = 224; char c = 'x'; foo("%s,%d,%c/n",a,b,c); return 0; } int foo(char *fmt, ...) { va_list ap; int d; char c, *s; va_start(ap, fmt); while (*fmt) switch(*fmt++) { case 's': /* string */ s = va_arg(ap, char *); printf("string %s/n", s); break; case 'd': /* int */ d = va_arg(ap, int); printf("int %d/n", d); break; case 'c': /* char */ /* need a cast here since va_arg only takes fully promoted types */ c = (char) va_arg(ap, int); printf("char %c/n", c); break; } va_end(ap); return 0; }
跑一下试试吧!
- va_start、va_arg、va_end分析
- va_list/va_start/va_arg/va_end深入分析
- va_list/va_start/va_arg/va_end深入分析
- va_list/va_start/va_arg/va_end深入分析
- va_list/va_start/va_arg/va_end深入分析
- va_list/va_start/va_arg/va_end深入分析
- va_list/va_start/va_arg/va_end深入分析
- va_list/va_start/va_arg/va_end深入分析
- va_list/va_start/va_arg/va_end深入分析
- 解释va_arg, va_end, va_start
- va_start(),va_arg(),va_end示例
- va_start、va_arg、va_end用法
- va_start va_arg va_end
- VA_LIST VA_START VA_ARG VA_END
- va_list、va_start、va_arg、va_end
- va_start(),va_arg(),va_end()
- va_list va_start va_arg va_end
- va_start,va_end, va_arg
- Android软件开发之发送短信与系统短信库解析
- Shell 脚本学习──文件存在判断
- QT 生成随机数
- 程序员应该知晓的100个vim命令
- PageRank的一个简单实现
- va_start、va_arg、va_end分析
- 冲击多个Input File赋值兼解决中文赋值问题
- silverlight4.0的grid边框
- Python简记
- 手写板开发总结
- Linux系统下的交换分区和交换文件的含义
- js onmouseout 与onmouseleave的区别
- SQL学习(9)SQL Server培训
- js移除option值的方法