请告诉我给定功能的回叫是什么以及如何回复?代码:
typedef struct {
int size;
ptrdiff_t index;
void (*inlet) ();
int argsize;
ptrdiff_t argindex;
} CilkProcInfo;
/*
* Returns a pointer to the slow version for a procedure
* whose signature is p.
*/
/* the function definition is - */
static void (*get_proc_slow(CilkProcInfo *p)) () {
return p[0].inlet;
}
/*The function gets called as -*/
(get_proc_slow(f->sig)) (ws, f);
/*where f->sig is a pointer to CilkProcInfo struct*/
答案 0 :(得分:5)
在CilkProcInfo
结构中,inlet
是指向未指定数量的参数且不返回值的函数的指针,如void foo();
在第
行(get_proc_slow(f->sig)) (ws, f);
get_proc_slow(f->sig)
调用返回此函数指针,因此它等同于
(f->sig[0].inlet) (ws, f);
因此,如果您的f->sig[0].inlet
指向函数foo()
,那么它等同于调用
foo (ws, f);
我应该承认static void (*get_proc_slow(CilkProcInfo *p)) () {...
语法对我来说有点陌生。
答案 1 :(得分:1)
get_proc_slow()返回一个类型为void(*)()的函数指针,然后代码调用该指针。所以当你这样做时:
(get_proc_slow(f->sig)) (ws, f);
与基本相同:
void (*fptr)() = get_proc_slow(f->sig);
fptr(ws, f);
答案 2 :(得分:0)
看起来它是一个返回指向函数的指针的函数,该函数的返回值为void
,没有参数(void(*)()
)并且接受指向CilkProcInfo struct
的指针作为参数。我不确定为什么你需要p[0].inlet
结构。你不能把它作为p->inlet
返回吗?
哦是的,get_proc_slow
是返回所述函数指针的函数的名称。
答案 3 :(得分:0)
static void (*get_proc_slow(CilkProcInfo *p)) () {
return p[0].inlet;
}
从名称中读取,注意语法规则:get_proc_slow
是一个函数(带有内部链接),它接受指向CilkProcInfo
结构的指针并返回指向未指定的函数的指针参数并且不返回任何值(void
)。
(get_proc_slow(f->sig)) (ws, f);
此语句使用适当的参数调用get_proc_slow
(f->sig
是指向CilkProcInfo
的指针),然后使用返回值(指向函数的指针)来调用该函数以ws
和f
作为参数。