C++言語のcomplex型は、C言語の上位互換ではない。CからC++へ移行するためにはcomplex型まわりを修正する。 修正は下記のようにする。わりと単純で多くないようだ。
ISO C 1998 や ISO C 2011 のソースを ISO C++ 1998 や ISO C++ 2011 にするなどの方法 ( gcc, g++ version 4.8.5 で試した )。 (注) 試行錯誤して、いいだろうと見つけた方法である。
#include <tgmath.h> //complex.hもインクルードされている を #include <complex> に変更する。
double complex a; を std::complex<double> a; に変更する。using std::complex; をすれば std::を略せる。
#define creal real #define cimag imag を追加する。creal, cimagは std::real, std::imagに変更されている。また、 この std::は何もしなくても略せる。 const std::complex<double> I(0.0,1.0); を追加する。Iは無くなっているため。
#define fabs(z) sqrt(real(z)*real(z)+imag(z)*imag(z)) fabsは無いので、real,imag,sqrtで計算する。2023/11/29g++ 4.8.5の ISO C++ 1998はなんか怪しそうなので使わない方がよい?