2009-10-07 62 views
2

一個函數指針我有這樣的代碼:訪問沒有括號

#include <stdio.h> 

int getAns(void); 
int num; 

int main() 
{ 
    int (*current_ans)(void); 
    current_ans = &getAns; 
    // HERE 
    printf("%d", current_ans());  

} 

int getAns() 
{ 
    return num + 3; 
} 

然而,是有可能有在// HERE點,允許的下一行是printf("%d", current_ans);其以迂迴的方式訪問getAns()的東西?

+0

不完全是你想要的,但如果你不知道 - 你可以做'int v = current_ans();'然後將'v'傳遞給printf。 – 2009-10-07 02:54:10

回答

5

我懷疑你不能,因爲()要告訴編譯器它是一個函數調用。 不過,如果你真的要做到這一點,你可以這樣做:

#define current_ans current_ans() 
1

什麼「的#define current_ans myRoundaboutFnName()」

6

雖然我pierr的答案一致,則

#define current_ans current_ans() 

將使代碼非常不可讀

+2

+1。實際上,放置這個宏會使'主要'代碼變得無用。 – 2009-10-07 02:59:11

1

不,因爲current_anscurrent_ans()是不同的東西。如果沒有括號,current_ansgetAns都是函數指針,而括號是函數調用。如果你認爲括號是通過執行代碼來解引用指針的,那麼你所要求的就是將指針和指針的內容作爲一個對象來處理。