测试 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()
宏,它适用于所有复杂类型。
我想为 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()
宏,它适用于所有复杂类型。