gpt4 book ai didi

c - 如何制作用于定义函数 typedef 的 C 宏?

转载 作者:行者123 更新时间:2023-12-04 10:57:56 26 4
gpt4 key购买 nike

我想拿这个:

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 检查.

关于c - 如何制作用于定义函数 typedef 的 C 宏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59059848/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com