我要这样:
typedef int (*PTR_FUN)(int);
typedef int (*PTR_FUN_FUN)(PTR_FUN, PTR_FUN);
并定义如下:
MAKE_FUNCTION_TYPE(PTR_FUN, int, int);
MAKE_FUNCTION_TYPE(PTR_FUN_FUN, PTR_FUN, PTR_FUN, int);
...其中参数的数量是动态的,最后一个参数是返回类型。
如果不可能将最后一个arg作为返回类型,则作为第二个arg。
您想要的是可变参数宏,它可以接受任意数量的参数。语法为#define MACRO(fixedarg1, fixedarg2, ...)
。在宏的主体中,您只需使用__VA_ARGS__
即可引用所有变量参数。
不幸的是,您不能使最后一个arg为返回类型,因为您必须统一对待整个变量参数块,并且它们必须位于最后。但是,您可以很容易地使第二个arg返回类型:
#define MAKE_FUNCTION_TYPE(name, ret, ...) typedef ret (*name)(__VA_ARGS__)
MAKE_FUNCTION_TYPE(v_i, int);
MAKE_FUNCTION_TYPE(i_v, void, int);
MAKE_FUNCTION_TYPE(ii_cp, char *, int, int);
这相当于
typedef int (*v_i)();
typedef void (*i_v)(int);
typedef char * (*ii_cp)(int, int);
您可以使用检查cc -E
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句