今天看源代码 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的定义所在
- arch/powerpc/boot/types.h, line 13
- tools/perf/util/types.h, line 9
- include/asm-generic/int-l64.h, line 46
- include/asm-generic/int-ll64.h, line 51
有时它们的最终会是一样,但是有时却大不一样,我们在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 */