如果我有一个函数指针的typedef,例如
typedef void (* specialFunction) (void);
我如何证明我正在声明该类型的函数,而不仅仅是具有相同签名的函数?
我不是要强制执行任何操作,只是为了使代码更易读(并且可维护),并且明确表示函数声明,计时器回调或ISR例程。
显然,我不能
extern specialFunction mySpecialFunction(void);
但是有什么方法可以在声明中使用specialFunction
来区分mySpecialFunction
和myBoringlyNormalFunction
吗?
答案 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会使代码更容易阅读,因为*
符号的存在清楚地表明我们是否正在使用指针。