質問

指定された関数の呼び出しが何を返すか、どのように教えてください。コード:

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*/
役に立ちましたか?

解決

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))(){... 構文は少し馴染みがないことを認めるべきです。

他のヒント

get_proc_slow()は、コードが呼び出すvoid(*)()型の関数ポインターを返します。その場合:

(get_proc_slow(f->sig)) (ws, f);

基本的には次と同じです:

void (*fptr)() = get_proc_slow(f->sig);
fptr(ws, f);

パラメータを持たない( void(*)())戻り値が void である関数へのポインタを返す関数のように見えます。パラメーターとしての CilkProcInfo struct へのポインター。しかし、なぜ p [0] .inlet コンストラクトが必要なのかわかりません。単に p-> inlet として返せませんか?

ああ、 get_proc_slow は、上記の関数ポインターを返す関数の名前です。

static void (*get_proc_slow(CilkProcInfo *p)) () {
     return p[0].inlet;
}

名前から読み取り、文法規則に注意してください: get_proc_slow は、 CilkProcInfo 構造体へのポインターを取り、未指定の引数を取り、値を返さない関数へのポインター( void )。

(get_proc_slow(f->sig)) (ws, f);

このステートメントは、適切なパラメーター( f-> sig CilkProcInfo へのポインター)で get_proc_slow を呼び出してから、 ws および f を引数としてその関数を呼び出すための戻り値(関数へのポインター)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top