谁能具体讲一下va_start等几个宏的意思!
比如下面的宏是怎样求出变量所占内存大小的?
#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )
还有
#define va_start(ap,v) ( ap = (va_list)&v + _INTSIZEOF(v) )
#define va_arg(ap,t) ( *(t *)((ap += _INTSIZEOF(t)) - _INTSIZEOF(t)) )
#define va_end(ap) ( ap = (va_list)0 )
谢谢了
[解决办法]
va_list
类型用于声明一个变量,该变量将依次引用各参数。我们可以定义变量名为ap
Va_start
将ap初始化为指向一个无名参数的指针,在使用ap之前该宏必须被调用一次。
Va_arg
每次调用该行数,都将返回一个参数。并将ap指向下一个参数va_arg使用一个类型名决定返回的对象类型,指针称动的步长。
Va_end
printf行数结束前调用va_end完成必要的清理工作。
------------------------
常用于printf等可变参数的函数中,就知道这些
[解决办法]
输入类型,宏进行替换,按照开始地址强制转换成目标类型的指针,然后获取内容
[解决办法]
#define _INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int) - 1) )
//按sizeof(int)个字节对齐取大小.