测试 GNU 扩展

Test for GNU extension

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

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

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

此外,如果有人知道执行此操作的便携方法,我也会对该解决方案感兴趣。

根据 manual:

To test for the availability of these features in conditional compilation, check for a predefined macro __GNUC__, which is always defined under GCC.

因此:

#ifdef __GNUC__

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

#endif

Also, if anyone knows of a portable way to do this, I'd be interested in that solution as well.

这就是 <tgmath.h> 中的 creal() 宏,它适用于所有复杂类型。