0

给定这个宏:

#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));

谢谢。

4

3 回答 3

6

您可以使用-Egcc 的标志来查看宏是如何展开的:

typedef void (*some_func_myFunctionName) (int a); static some_func_myFunctionName my_func_myFunctionName = ((void *)0);;
于 2012-08-20T14:51:36.090 回答
2
static void (*my_func_myFunctionName) (int a) = NULL;

它将一个变量声明my_func_myFunctionName为一个函数指针,指向一个函数,该函数接受一个int并且不返回任何内容 ( void)。它将变量初始化为NULL

于 2012-08-20T14:52:14.110 回答
0
    #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)
于 2012-08-20T14:55:26.710 回答