源代码阅读

今天看源代码 printf函数的实现方式,从va_start的实现方式发现_bnd  (A, _AUPBND) 又在上面发现 _AUPBND的宏定义

288 #define  _AUPBND                (sizeof (acpi_native_int) - 1) //这个AUPBND 是栈 向上增长的意思?还是其他什么意思,这个宏的含义我们要怎么才能得到啊,到底是哪个单词的缩写呢?
 追踪_AUPBND的时候发现在两个文件中均有这个宏的定义,这时我们应该选择哪个呢? 

acpi_native_int

Defined as a type in:
这是在  189 行发现的 typedef s32 acpi_native_int;
这是    150 typedef s64 acpi_native_int;
这是关于s64的定义所在
   
   
   
   
有时它们的最终会是一样,但是有时却大不一样,我们在linux下的LXR下怎么到底是哪一个呢,如果依次寻找它们包含的头文件,这是个多么庞大的工程,还是我的LXR没有配置好,在MS下的source insignt 是不是可以清楚的看到呢?(待测试)
??????????要是知道了怎么解决 还望大家告诉我
这个问题先搁一搁,
这是比较完整的代码段
282 typedef char *va_list;
283 #endif                          /* _VALIST */
284 
285 /*
286  * Storage alignment properties
287  */
288 #define  _AUPBND                (sizeof (acpi_native_int) - 1)
289 #define  _ADNBND                (sizeof (acpi_native_int) - 1)
290 
291 /*
292  * Variable argument list macro definitions
293  */
294 #define _bnd(X, bnd)            (((sizeof (X)) + (bnd)) & (~(bnd)))/*将类型或变量X的长度对齐到bnd+1字节的整数倍,例如_Bnd(char, 3U)的值是4,_Bnd(int, 3U)也是4。*/
295 #define va_arg(ap, T)           (*(T *)(((ap) += (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND))))
/*
va_arg返回参数列表中的当前参数并使ap指向参数列表中的下一个参数
*/
296 #define va_end(ap)              (void) 0
/*将ap置为无效指针*/
297 #define va_start(ap, A)         (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND))))
/*
va_start(ap, format)使ap指向format参数的下一个参数
*/
298 299 #endif /* va_arg */






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值