Доступ к указателю на функцию без скобок - PullRequest
2 голосов
/ 07 октября 2009

У меня есть этот код:

#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 ]

6 голосов
/ 07 октября 2009

Хотя я согласен с ответом Пьера,

#define current_ans current_ans()

сделает код очень большим нечитаемым

5 голосов
/ 07 октября 2009

Я подозреваю, что вы не можете, потому что () необходимо, чтобы сообщить компилятору, что это вызов функции. Однако, если вы действительно хотите это сделать, вы можете сделать:

#define current_ans current_ans()
1 голос
/ 07 октября 2009

Нет, потому что current_ans и current_ans() это разные вещи. Без скобок и current_ans, и getAns являются указателями на функции, в то время как в скобках они являются вызовами функций. Если вы думаете о скобках как о разыменовании указателя путем выполнения кода, по сути, вы просите рассматривать указатель и содержимое указателя как одно и то же.

1 голос
/ 07 октября 2009

А как насчет "#define current_ans myRoundaboutFnName ()"

...