2

_Generic我在 Wikipedia 上阅读了这个 C11 的示例:

#define cbrt(X) _Generic((X), long double: cbrtl, \
                          default: cbrt, \
                          float: cbrtf)(X)

似乎很清楚如何将它用于只有一个参数的函数,但我看不到用这个系统编写具有两个(或更多)泛型参数的函数的方法。怎么可能?

如果某些编译器支持此功能,我会尝试一些事情,但我也找不到,所以我无法找到有关如何做到这一点的任何想法。

4

1 回答 1

4

显然,这没有“通用”规则,它实际上取决于用例。但是一个典型的用例是使用标准促销来确定一个常见的“超类型”

#define pow(X, Y) _Generic((X)+(Y), long double: powl, \
                          default: pow,                \
                          float: powf)((X), (Y))

如果调用这个宏时类型不一致,那么窄的会自动升级为宽的XY

于 2013-05-07T12:53:16.163 回答