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

How to show that function belongs to a typedef in C?

如果我有函数指针的typedef,比如

typedef void (* specialFunction) (void);

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

我并不是要强制执行任何内容,只是为了使代码更清晰(和可维护),并明确表示函数声明是定时器回调或 ISR 例程。

显然,我不能

extern specialFunction mySpecialFunction(void);

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

你对此无能为力。但是,对于视觉表示,您可以使用像 Adam Dunkels 这样的自定义 protothreads:

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

然后像这样声明函数:

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

例如,这只是将函数表示为 timer callback的一种方式。

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

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");
    }

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

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

typedef void specialFunction(void);

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

specialFunction func_name;

specialFunction *p_func = &func_name;

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