首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

哪位高手能具体讲一下va_start等几个宏的意思

2012-04-11 
谁能具体讲一下va_start等几个宏的意思!比如下面的宏是怎样求出变量所占内存大小的?#define_INTSIZEOF(n)(

谁能具体讲一下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)个字节对齐取大小.

热点排行