1

我想制作一个宏来返回复数的实部(适用于 double、float 和 long double 类型)。GNU C 扩展__real__似乎符合要求(尽管不幸的是它不可移植)。我正在尝试以下操作:

#include <complex.h>
#if defined(__real__)
#define MYREAL(z) (__real__ z)
#endif

然而,扩展似乎__real__没有被定义为一个普通的宏,所以 defined( __real__) 测试失败了,即使它可用。有谁知道如何测试是否存在__real__为此制作适当的宏?

此外,如果有人知道这样做的便携方式,我也会对该解决方案感兴趣。

4

2 回答 2

4

手册

要在条件编译中测试这些功能的可用性,请检查预定义的宏__GNUC__,它总是在 GCC 下定义。

因此:

#ifdef __GNUC__

#define MYREAL(z) (__real__(z))

#endif
于 2020-12-18T05:32:06.010 回答
3

此外,如果有人知道这样做的便携方式,我也会对该解决方案感兴趣。

那将是 in 中的creal()<tgmath.h>,它适用于所有复杂类型。

于 2020-12-18T06:59:08.613 回答