您的位置:首页 > 编程语言 > C语言/C++

C语言编程细节

2014-01-08 17:26 141 查看
1。C函数参数压栈顺序为从右到左,即第一个参数最靠近栈顶。

2。可变参数va-list必须有至少一个参数,最左边的参数,即栈顶参数,这样可以根据第一个参数地址,从低地址起,到高地址,逐一找到其他参数。

Linux 相关va_list宏定义

/*

* 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)))

//先得到ap的值,加了size bounder,然后减了size得到该T的值。

#define va_arg(ap, T) (*(T *)(((ap) += (_bnd (T, _AUPBND))) - (_bnd (T,_ADNBND))))

#define va_end(ap) (void) 0

#define va_start(ap, A) (void) ((ap) = (((char *) &(A)) + (_bnd (A,_AUPBND))))
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: