如何在C中显示该函数属于typedef?

时间:2017-03-17 09:53:29

标签: c function pointers maintainability

如果我有一个函数指针的typedef,例如

typedef void (* specialFunction) (void);

我如何证明我正在声明该类型的函数,而不仅仅是具有相同签名的函数?

我不是要强制执行任何操作,只是为了使代码更易读(并且可维护),并且明确表示函数声明,计时器回调或ISR例程。

显然,我不能

extern specialFunction mySpecialFunction(void);

但是有什么方法可以在声明中使用specialFunction来区分mySpecialFunctionmyBoringlyNormalFunction吗?

3 个答案:

答案 0 :(得分:2)

你不能做任何事情。但是,对于可视化表示,您可以在protothreads中使用像Adam Dunkels这样的自定义:

typedef void (* specialFunction) (void);
#define TIMERCALLBACK(x)         specialFunction x

然后声明这样的函数:

TIMERCALLBACK(mycallback(void)) {
    //do your job
}

这只是一种如何将函数表示为timer callback的方法。

答案 1 :(得分:1)

你不能声明这样的函数,只能声明变量。但您可以使用宏来确保您的函数正确声明。

typedef void (* specialFunction) (void);
#define SPECIALFUNCTION(x) void x(void)

extern SPECIALFUNCTION(mycallback);

int main(void)
    {
    specialFunction foo=mycallback;
    foo();
    }

SPECIALFUNCTION(mycallback)
    {
    printf("test\n");
    }

答案 2 :(得分:1)

void (* specialFunction) (void);是指针类型。您不能声明指针类型的函数。我假设你的意思是你要声明像void f(void);这样的函数,但是基于那个typedef。

如果是这样,您可以将typedef设为函数类型:

typedef void specialFunction(void);

然后你可以声明一个该类型的函数和一个指向这样的函数的指针:

specialFunction func_name;

specialFunction *p_func = &func_name;

许多人认为避免使用指针typedef会使代码更容易阅读,因为*符号的存在清楚地表明我们是否正在使用指针。