给定这个宏:
#define SOME_MACRO(ret, f, args) \
typedef ret (*some_func_##f) args; \
static some_func_##f my_func_##f = NULL;
请让我知道等效项:
SOME_MACRO(void, myFunctionName, (int a));
谢谢。
给定这个宏:
#define SOME_MACRO(ret, f, args) \
typedef ret (*some_func_##f) args; \
static some_func_##f my_func_##f = NULL;
请让我知道等效项:
SOME_MACRO(void, myFunctionName, (int a));
谢谢。
您可以使用-E
gcc 的标志来查看宏是如何展开的:
typedef void (*some_func_myFunctionName) (int a); static some_func_myFunctionName my_func_myFunctionName = ((void *)0);;
static void (*my_func_myFunctionName) (int a) = NULL;
它将一个变量声明my_func_myFunctionName
为一个函数指针,指向一个函数,该函数接受一个int
并且不返回任何内容 ( void
)。它将变量初始化为NULL
。
#define SOME_MACRO(ret, f, args) \
typedef ret (*some_func_##f) args; \
static some_func_##f my_func_##f = NULL;
SOME_MACRO(void, myFunctionName, (int a));
将转化为
typedef void (*some_func_myFunctionName) (int a); //## concats myFunctionName to some_func_, ret becomes void
static some_func_myFunctionName my_func_myFunctionName = NULL;
##f concats myFunctionName to some_func_, ret becomes void args is (int a)