gpt4 book ai didi

C 如何从 va_arg 获取函数指针类型的参数

转载 作者:行者123 更新时间:2023-12-02 08:17:25 25 4
gpt4 key购买 nike

我知道如果我将像 void (*func)(void *) 这样的参数传递给可变参数函数,我可以像这样检索参数:

void (*func)(void *) = va_arg( args, void (*)(void) );

如果我传递类似 void (** func)(void *) 的东西会怎样?使用 va_arg 检索此类型参数的正确语法是什么?

最佳答案

坦率地说,您的代码不符合标准。 va_arg() 的第二个参数有一个小限制。宏观:

... The parameter type shall be a type name specified such that the type of a pointer to an object that has the specified type can be obtained simply by postfixing a * to type. ...

据此,在这种情况下,像 void (*)(void *) 这样的符号是 Not Acceptable 。由于 * 的简单附加不会为您提供指向函数指针的指针。您只能使用 typedef 编辑的别名:

typedef void (*func_ptr)(void *);
typedef void (**ptr_to_func_ptr)(void *);

func_ptr var1 = va_arg(ap, func_ptr);
ptr_to_func_ptr var2 = va_arg(ap, ptr_to_func_ptr);

关于C 如何从 va_arg 获取函数指针类型的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40714670/

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