函数和函数指针声明的宏?

App*_*ker 3 c macros function-pointers c-preprocessor

我正在尝试创建一个宏函数来定义函数指针,函数等.

这是我正在尝试做的事情:

#define PRO_SIGNAL_MAX 5
#define PRO_SIGNAL( func, param ) (*func [ PRO_SIGNAL_MAX ])(param)
Run Code Online (Sandbox Code Playgroud)

我想用它来声明一个大小的函数指针数组PRO_SIGNAL_MAX.

所以,当我在这里使用它:

void PRO_SIGNAL( paint, (Pro_Window*) ); 
Run Code Online (Sandbox Code Playgroud)

我希望它生成:

void (*paint [ 5 ])(Pro_Window*) ;
Run Code Online (Sandbox Code Playgroud)

但它没有像我计划的那样工作,我得到这个错误:

pro_window.c|16|error: expected declaration specifiers or '...' before '(' token|
Run Code Online (Sandbox Code Playgroud)

究竟是什么问题?

Bla*_*iev 6

省略括号Pro_Window*:

void PRO_SIGNAL(paint, Pro_Window*);
Run Code Online (Sandbox Code Playgroud)

宏参数逐字替换,因此您最终得到:

void (*paint[PRO_SIGNAL_MAX])((Pro_Window*));
Run Code Online (Sandbox Code Playgroud)

这是一个语法错误.

此外,最好将宏参数括在宏本身的括号中,因为您永远不知道调用者是传递表达式还是单个标记:

#define PRO_SIGNAL(func, param) (*(func)[PRO_SIGNAL_MAX])(param)
Run Code Online (Sandbox Code Playgroud)