先看Linux内核源码
/*
* Storage alignment properties*/
#define _AUPBND (sizeof (acpi_native_int) - 1)
#define _ADNBND (sizeof (acpi_native_int) - 1)
/*
* Variable argument list macro definitions
*/
#define _bnd(X, bnd) (((sizeof (X)) + (bnd)) & (~(bnd)))//获取X的偏移地址,比喻X=“abc”,结果为4(32位cpu)
/*
bnd 获得X地址对其后偏移量。和cpu位数有关,关系不同平台移植。
打个比方,X=5,cpu为32位,即四个字节对齐。_bnd(X, bnd) 的值位8 ,此时不为5.
*/
#define va_end(ap) (void) 0
#define va_start(ap, A) (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND))))//得到了A的下一个参数的起始地址。
#endif /* va_arg */