如何将宏函数作为参数传递

时间:2019-11-23 13:48:16

标签: c

我有一个宏函数,其定义和实现如下:

#define TASK(k) void task_##k(void)
TASK(T1){ // expand to void task_T1(void)
 //.....do something
}

我在主函数中调用task_T1()可以工作,但是当我将task_T1分配给(void)(*fptr)(void)时会出错。

我想知道是否有可能将task_T1作为函数指针传递给另一个函数?

1 个答案:

答案 0 :(得分:1)

一些选项

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TASK(k) task_##k

void TASK(T1)(void){ // expand to void task_T1
printf("T1\n");
}

#define TASKNAME(k) task_##k
#define TASK1(k) void TASKNAME(k)(void)
#define TASKCALL(k) TASKNAME(k)()

TASK1(T2)
{
    printf("T2\n");
}

void (*ptr)(void) = TASK(T1);
void (*ptr1)(void) = TASKNAME(T2);


int main(void)
{
    TASK(T1)();
    ptr();
    TASKNAME(T2)();
    TASKCALL(T2);
    ptr1();
}