如何让 gcc 将类型 Rcomplex 与类型 double complex 连接起来?

How do I get gcc to connect type Rcomplex with type double complex?

我(希望)破解了 R 包 MASS,使其能够对复数数据执行稳健的线性拟合。它使用外部 c 和 FORTRAN 代码来执行一些我修改/替换以适应复数的线性代数。

在尝试通过 R CMD SHLIB 编译 c 源文件时,出现如下错误:

error: invalid operands to binary - (have ‘Rcomplex’ {aka ‘struct <anonymous>’} and ‘Rcomplex’ {aka ‘struct <anonymous>’})

显然,编译器不理解 Rcomplex 类型应被视为双精度复数类型。这并非完全出乎意料,因为 Writing R Extensions 提到对于具有特定配置的特定编译器可能会发生这种情况。但是,我无法找到有关如何更改配置以使其正常工作的任何信息。

我试过更改优化级别无济于事,除了 complex.h、Complex.h、Rmath.h 和 R.h 之外,还包括各种头文件也没用。

有人知道我可能遗漏了什么吗?

如果您想根据语句 在大多数平台上以与 C99 双复数类型兼容的方式存储 ,您可以 e. g.

#define Ccomplex(Rcomplex) (*(double complex *)&Rcomplex)

并将其应用于每个 Rcomplex 操作数,或者您甚至可以尝试将 Rcomplex 的定义更改为

typedef double complex Rcomplex;

整个 C 源文件。但请记住,即使它适用于一种机器类型,您也不能确定它适用于其他机器类型。