gpt4 book ai didi

c - 不使用 _Generic 的 C 函数重载

转载 作者:行者123 更新时间:2023-12-01 16:19:07 26 4
gpt4 key购买 nike

我希望在 C 中完成函数重载,但我试图在不支持 C11 的 Unix 服务器上运行我的代码,因此 _Generic 关键字不可用。

(升级服务器使其具有更新版本的 GCC 不是一种选择)。

除了使用 _Generic 来模拟 C 中有效的函数重载之外,是否有任何替代方法?

最佳答案

对于某些参数类型,您可以进行有限形式的重载,如下所示:

void func_int(int);
void func_long(long);
void func_longlong(long long);

#define FUNC(X) \
(sizeof(X) <= sizeof(int) ? func_int(X) \
: sizeof(X) == sizeof(long) ? func_long(X) \
: func_longlong(X))

这将允许您使用 FUNC(i) 并让它调用不同的函数。它是有限的,因为您只能通过大小来区分类型。这意味着如果 sizeof(int) == sizeof(long) 那么你将永远不会调用 func_long,如果 sizeof(long) == sizeof(long long) 那么你将永远不会调用 func_longlong。此外,如果 sizeof(double) 与您正在测试的整数类型之一相同,则您不能重载其他类型,例如 double

它可用于重载,例如floatdoublelong double,您可能有不同的函数实现,这些实现或多或少取决于精度(即数字参数类型中的位数)。

关于c - 不使用 _Generic 的 C 函数重载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36504216/

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