gpt4 book ai didi

c - 下面的 va_arg 宏是如何工作的?

转载 作者:行者123 更新时间:2023-12-05 01:30:01 27 4
gpt4 key购买 nike

我正在阅读一个 stdarg.h(下面的链接)头文件,它定义了 va_arg 宏,如下所示

/*
* Increment ap to the next argument in the list while returing a
* pointer to what ap pointed to first, which is of type t.
*
* We cast to void* and then to t* because this avoids a warning about
* increasing the alignment requirement.
*/
#define va_arg(ap, t) \
(((ap) = (ap) + __va_argsiz(t)), \
*((t*) (void*) ((ap) - __va_argsiz(t))))

线

((ap) = (ap) + __va_argsiz(t))

重新分配 ap 的值,但我不明白逗号或行的用途

*((t*) (void*) ((ap) - __va_argsiz(t)))

Link to stdarg.h file

最佳答案

我们需要向调用者返回ap 指向的内容,提前ap。一个等价物是

    old_ap = ap
ap = ap + argsiz
return *old_ap

但是,这将需要一个额外的变量,这很难(如果可能的话)以可移植的方式在宏中处理。相反,宏依赖于逗号表达式。它推进 ap,然后计算其旧值,该值成为逗号表达式的值,即整个宏的值。

关于c - 下面的 va_arg 宏是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57629869/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com