
高手请进!请详细解释下以下VC库中的宏定义,感激不尽!!
#define_INTSIZEOF(n)((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))#defineva_start(ap,v)...
#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)
请详细解释下下面的四段代码:
((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))
(ap=(va_list)&v+_INTSIZEOF(v))
( *(t*)((ap+=_INTSIZEOF(t))-_INTSIZEOF(t) ))
(ap=(va_list)0)
说下各段代码的具体作用也行 展开
#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)
请详细解释下下面的四段代码:
((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))
(ap=(va_list)&v+_INTSIZEOF(v))
( *(t*)((ap+=_INTSIZEOF(t))-_INTSIZEOF(t) ))
(ap=(va_list)0)
说下各段代码的具体作用也行 展开
展开全部
va 这三个是变长参数用的宏
_INTSIZEOF(n)基本上就是sizeof, 不过会对齐到sizeof(int)的整数倍
具体作用你去google“变长参数”嘛, 结果一大堆, 看看就知道了
比如这个 http://blog.csdn.net/hailongchang/archive/2007/05/15/1609720.aspx
_INTSIZEOF(n)基本上就是sizeof, 不过会对齐到sizeof(int)的整数倍
具体作用你去google“变长参数”嘛, 结果一大堆, 看看就知道了
比如这个 http://blog.csdn.net/hailongchang/archive/2007/05/15/1609720.aspx
展开全部
所谓宏定义 其实就是代码复用:
比如:_INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))
在代码中使用
void fun(int n)
{
...
return _INTSIZEOF(n);
}
编译时,编译器会自动更换宏定义为对应代码:
void fun(int n)
{
...
return ((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))
}
比如:_INTSIZEOF(n) ((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))
在代码中使用
void fun(int n)
{
...
return _INTSIZEOF(n);
}
编译时,编译器会自动更换宏定义为对应代码:
void fun(int n)
{
...
return ((sizeof(n)+sizeof(int)-1)&~(sizeof(int)-1))
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询