Argument Access:va_start, va_arg, va_end, va_list
来源:互联网 发布:域名注册 公司英文 编辑:程序博客网 时间:2024/05/08 15:42
主要用于可变参数数目的函数中,用于解析可变的参数。
一般应用见printf, scanf等函数中,给个例子看看,CE中打印Trace消息
void NKDbgPrintfW(
const WCHAR *sz, ...)
{
unsigned char c;
va_list vl;
va_start(vl, sz);
while (*sz) {
c = (unsigned char)*sz++;
switch (c) {
case (unsigned char)'%':
c = (unsigned char)*sz++;
switch (c) {
case 'x':
pOutputNumHex(va_arg(vl, unsigned long), 0);
break;
case 'B':
pOutputNumHex(va_arg(vl, unsigned long), 2);
break;
case 'H':
pOutputNumHex(va_arg(vl, unsigned long), 4);
break;
case 'X':
pOutputNumHex(va_arg(vl, unsigned long), 8);
break;
case 'd': {
long l;
l = va_arg(vl, long);
if (l < 0) {
pOutputByte('-');
l = - l;
}
pOutputNumDecimal((unsigned long)l);
}
break;
case 'u':
pOutputNumDecimal(va_arg(vl, unsigned long));
break;
case 's':
OutputStringW(va_arg(vl, WCHAR *));
break;
case '%':
pOutputByte('%');
break;
case 'c':
c = va_arg(vl, unsigned char);
pOutputByte(c);
break;
default:
pOutputByte(' ');
break;
}
break;
case '/n':
pOutputByte('/r');
// fall through
default:
pOutputByte(c);
}
}
va_end(vl);
}
关于这三个函数的实现原理,可见这位老兄的分析,
关注编译器是如何实现上述函数的,可变参数在函数入栈的顺序,在内存中的布局。
http://tech.ccidnet.com/art/1081/20050411/236377_2.html
- Argument Access:va_start, va_arg, va_end, va_list
- 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_end, va_arg
- 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_start/va_arg/va_end/va_list
- 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用法
- TCP/IP详解学习笔记(4)-ICMP协议,ping和Traceroute
- Gann图解
- php生成文档类
- 资料收集移动警务重在多元应用
- Session超时怎么判断
- Argument Access:va_start, va_arg, va_end, va_list
- 如何实现子窗口关闭父窗口也关闭
- 从追MM谈Java的23种设计模式
- MutiView控件
- 贴出最新整理的英语谚语大全(3267条)
- 怪怪的 No result defined for action 错误(解决办法)
- SQL语句收藏
- C++-内存管理(整理笔记)
- Java抽取Word和PDF格式文件