【问题标题】:Test for GNU extension测试 GNU 扩展
【发布时间】:2020-12-18 04:58:27
【问题描述】:

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

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

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

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

【问题讨论】:

  • __real__ 来自哪里?也许该标头定义了一个包含一次的保护。
  • creal() 应该处理你扔给它的任何东西。
  • 这可能不是一个骗局,但this question 说它不容易做到。
  • creal()是为double定义的,float和long double还有其他函数(crealf, creall)

标签: c gcc complex-numbers gcc-extensions


【解决方案1】:

manual:

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

因此:

#ifdef __GNUC__

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

#endif

【讨论】:

    【解决方案2】:

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

    那就是&lt;tgmath.h&gt; 中的creal() 宏,它适用于所有复杂类型。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-14
      相关资源
      最近更新 更多