23,121
社区成员
发帖
与我相关
我的任务
分享
#include <stdio.h>
#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )
#define va_start(ap,v) ( ap = (char *)&v + _INTSIZEOF(v) ) //第一个可选参数地址
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) ) //下一个参数地址
#define va_end(ap) ( ap = (char *)0 ) // 将指针置为无效
void simple_va_fun(int i, ...)
{
char * arg_ptr;
int j=0,k=0;
va_start(arg_ptr,i);
j=va_arg(arg_ptr,int);
k=va_arg(arg_ptr,int);
va_end(arg_ptr);
printf("%d@%d@%d \n",i,j,k);
return;
}
void main()
{
simple_va_fun(5,7,9);
}
simple_va_fun (i=5) at newtest2.c:14
14 int j=0,k=0;
(gdb) p i
$1 = 5
(gdb) p &i
$2 = (int *) 0x7fffffffdcdc
(gdb) x/16uw 0x7fffffffdcdc
0x7fffffffdcdc: 5 0 0 0
0x7fffffffdcec: 0 0 0 7
0x7fffffffdcfc: 0 9 0 0
0x7fffffffdd0c: 0 4196000 0 4158552288
(gdb) p arg_ptr
$3 = 0x0
(gdb) s
15 va_start(arg_ptr,i);
(gdb) p arg_ptr
$4 = 0x0
(gdb) x/16uw 0x7fffffffdcdc
0x7fffffffdcdc: 5 0 0 0
0x7fffffffdcec: 0 0 0 7
0x7fffffffdcfc: 0 9 0 0
0x7fffffffdd0c: 0 4196000 0 4158552288
(gdb) i local
arg_ptr = 0x0
j = 0
k = 0
(gdb) s
16 j=va_arg(arg_ptr,int);
(gdb) i local
arg_ptr = 0x7fffffffdce0 ""
j = 0
k = 0
(gdb) x/16uw 0x7fffffffdce0
0x7fffffffdce0: 0 0 4294958304 32767
0x7fffffffdcf0: 0 0 7 0
0x7fffffffdd00: 9 0 0 0
0x7fffffffdd10: 4196000 0 4158552288 32767
(gdb) x/16uw 0x7fffffffdcdc
0x7fffffffdcdc: 5 0 0 4294958304
0x7fffffffdcec: 32767 0 0 7
0x7fffffffdcfc: 0 9 0 0
0x7fffffffdd0c: 0 4196000 0 4158552288