宏等效(C / C ++)?

时间:2012-08-20 14:48:18

标签: c macros c-preprocessor

鉴于这个宏:

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

感谢。

3 个答案:

答案 0 :(得分:6)

您可以使用gcc的-E标志来查看宏的扩展方式:

typedef void (*some_func_myFunctionName) (int a); static some_func_myFunctionName my_func_myFunctionName = ((void *)0);;

答案 1 :(得分:2)

static void (*my_func_myFunctionName) (int a) = NULL;

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

答案 2 :(得分: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)