gpt4 book ai didi

c11 _Generic 添加类型

转载 作者:太空狗 更新时间:2023-10-29 15:51:12 24 4
gpt4 key购买 nike

如何向 c11 _Generic Functions 添加额外类型?

您是否必须#undef/re-#define 它?(如果是这样,下面的工作是否可行)还是有更好的方法?

#define to_str(X) _Generic((X), \
long double: ld_str, \
double: d_str, \
float: f_str, \
)(X)

#undef to_str

#define to_str(X) _Generic((X), \
long double: ld_str, \
double: d_str, \
float: f_str, \
int: i_str, \
)(X)

最佳答案

我不确定我是否完全理解您的问题。你的意思是你有一个由某个库提供的类型泛型宏,你想用你自己的新类型修改它?

你总是可以做的是给它另一个名字并使用默认大小写来获得提供的行为:

#define to_str2(X) _Generic((X), default: to_str(X), int: i_str(X))

编辑:

这不会完美地工作,因为您必须将函数参数评估放在 _Generic 中。这尤其意味着 X 的类型必须与嵌套泛型表达式的所有分支兼容。

如果有问题的库有一个只返回函数本身的宏,没有 (X),比如说 to_strGen,那会更容易,而且永远不会计算 X。那么你可以做

#define to_str2Gen(X) _Generic((X), default: to_strGen(X), int: i_str)
#define to_str2(X) to_str2Gen(X)(X)

关于c11 _Generic 添加类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9734982/

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