首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何制作C宏来定义函数类型?

如何制作C宏来定义函数类型?
EN

Stack Overflow用户
提问于 2019-11-26 21:48:59
回答 2查看 236关注 0票数 2

我想要这个:

代码语言:javascript
运行
复制
typedef int (*PTR_FUN)(int);
typedef int (*PTR_FUN_FUN)(PTR_FUN, PTR_FUN);

并将其定义如下:

代码语言:javascript
运行
复制
MAKE_FUNCTION_TYPE(PTR_FUN, int, int);
MAKE_FUNCTION_TYPE(PTR_FUN_FUN, PTR_FUN, PTR_FUN, int);

...where参数的数量是动态的,最后一个参数是返回类型。

如果不可能将最后一个arg作为返回类型,则作为第二个arg。

EN

Stack Overflow用户

回答已采纳

发布于 2019-11-26 22:24:03

您需要的是一个变量宏,它可以接受任意数量的参数。语法是#define MACRO(fixedarg1, fixedarg2, ...)。在宏的正文中,只需使用__VA_ARGS__引用所有变量参数。

不幸的是,您不能使最后一个arg返回类型,因为您必须统一处理整个变量块,它们必须是最后一个。但是,您可以很容易地将第二个arg设置为返回类型:

代码语言:javascript
运行
复制
#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);

这相当于

代码语言:javascript
运行
复制
typedef int (*v_i)();
typedef void (*i_v)(int);
typedef char * (*ii_cp)(int, int);

您可以使用cc -E进行检查。

票数 2
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59059848

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档