我知道如果我传递一个类似于void (*func)(void *)可变函数的参数,我可以检索如下的参数:
void (*func)(void *) = va_arg( args, void (*)(void) );
Run Code Online (Sandbox Code Playgroud)
如果我传递类似的内容void (** func)(void *)怎么办?使用va_arg?检索此类型的参数的正确语法是什么?
坦率地说,您的代码不符合标准.对于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)