2012-12-18 67 views
0

我有以下代碼:C函數指針參數打印問題

struct cache_t *    /* pointer to cache created */ 
cache_create(char *name,  /* name of the cache */ 
      int nsets,   /* total number of sets in cache */ 
      int bsize,   /* block (line) size of cache */ 
      int balloc,  /* allocate data space for blocks? */ 
      int usize,   /* size of user data to alloc w/blks */ 
      int assoc,   /* associativity of cache */ 
      enum cache_policy policy, /* replacement policy w/in sets */ 
      /* block access function, see description w/in struct cache def */ 
      unsigned int (*blk_access_fn) (enum mem_cmd cmd, 
              md_addr_t baddr, int bsize, 
              struct cache_blk_t * blk, 
              tick_t now, 
              int context_id), 
      unsigned int hit_latency) 
{        /* latency in cycles for a hit */ 
    struct cache_t *cp; 
    struct cache_blk_t *blk; 
    int i, j, bindex; 
---- 
---- 
--- 

    cp->blk_access_fn = blk_access_fn; 

---- 
--- 

我想打印context_id和baddr。我該怎麼做 ? 我試過類型轉換和所有東西,但它總是給我錯誤: 符號「context_id」在當前上下文中無效。 幫助會很高興。

+0

你總是可以用'indent -kr'命令在linux中縮進'C'代碼 –

回答

4

我想你誤解了cache_create函數。它根本沒有context_idbaddr參數。它具有的參數是blk_access_fn,它是一個函數指針。該功能大概稱爲cache_create將具有那些2個變量作爲參數。

的一種方式,以更好地可視化,這將是像這樣:

typedef unsigned int (*blk_access_fn_ptr)(enum mem_cmd cmd, md_addr_t baddr, int bsize, struct cache_blk_t *blk, tick_t now, int context_id); 

struct cache_t *   /* pointer to cache created */ 
cache_create(char *name,  /* name of the cache */ 
    int nsets,   /* total number of sets in cache */ 
    int bsize,   /* block (line) size of cache */ 
    int balloc,  /* allocate data space for blocks? */ 
    int usize,   /* size of user data to alloc w/blks */ 
    int assoc,   /* associativity of cache */ 
    enum cache_policy policy, /* replacement policy w/in sets */ 
    /* block access function, see description w/in struct cache def */ 
    blk_access_fn_ptr blk_access_fn, 
    unsigned int hit_latency) /* latency in cycles for a hit */ 
{ 
    ... 
} 

此代碼的功能與您發佈的代碼相同。正如你所看到的,cache_create沒有你正在尋找的參數。您必須使用適當的原型傳遞函數作爲blk_access_fn參數,並且它將包含它們。

+0

這就是它應該如何定義的。不知道OP作品提供的定義。 :o –

+0

謝謝你的回覆。我明白你的意思,但我仍然覺得很難,我怎麼才能打印fn blk_access_fn_ptr爲baddr和context_id值?考慮一個函數a(相同的參數)像原型。 – user1908559

+0

@ user1908559:正如我所說的,當**函數被調用時,您需要將函數傳遞給具有適當原型的'cache_create',您應該能夠毫無問題地打印其參數。 –

0

如果我正在閱讀這個權利,你沒有傳入context_id,你正在接受一個帶有context_id參數的fxn指針。您可以在blk_access_fn中訪問它們,但不能在cache_create內部訪問它們。