访问不带括号的函数指针

时间:2009-10-07 02:30:44

标签: c pointers function macros parentheses

我有这段代码:

#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()的内容?

4 个答案:

答案 0 :(得分:6)

虽然我同意皮尔的回答,但

#define current_ans current_ans()

会使代码非常不可读

答案 1 :(得分:5)

我怀疑你不能,因为()是必要的告诉编译器它是一个函数调用。 但是,如果你真的想要这样做,你可以这样做:

#define current_ans current_ans()

答案 2 :(得分:1)

“#define current_ans myRoundaboutFnName()”

怎么样?

答案 3 :(得分:1)

不,因为current_anscurrent_ans()是不同的事情。如果没有括号,current_ansgetAns都是函数指针,而使用括号,它们是函数调用。如果您将括号视为通过执行代码解除引用指针的类型,那么基本上您要求的是将指针和指针的内容视为同一个指针。