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 abs fabsは無く、std::absはある。なお、std::は略せる。 この置き換えは正常に行われないようだ。そのためソース内のすべての fabsを absに書き換えることになる。2023/11/28g++ 4.8.5の ISO C++ 1998はなんか怪しそうなので使わない方がよいだろう。