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

b_p*_*kes 2 c

我知道如果我传递一个类似于void (*func)(void *)可变函数的参数,我可以检索如下的参数:

void (*func)(void *) = va_arg( args, void (*)(void) );
Run Code Online (Sandbox Code Playgroud)

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

Ser*_*gio 5

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

...参数type应该是指定的类型名称,以便只需通过将*固定到类型即可获得指向具有指定类型的对象的指针的类型....

据此,void (*)(void *)在这种情况下,符号是不可接受的.由于简单的追加*不会给你指向函数的指针.您可以只使用typedef-ed别名:

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);
Run Code Online (Sandbox Code Playgroud)