howto/C++言語

一行メモ


complex型を使ったCソースをC++でコンパイルする方法(CからC++への移行)

C++言語のcomplex型は、C言語の上位互換ではない。CからC++へ移行するためにはcomplex型まわりを修正する。 修正は下記のようにする。わりと単純で多くないようだ。

ISO C 1998 や ISO C 2011 のソースを ISO C++ 1998 や ISO C++ 2011 にするなどの方法 ( gcc, g++ version 4.8.5 で試した )。 (注) 試行錯誤して、いいだろうと見つけた方法である。

  1. ヘッダファイルの変更
    #include  <tgmath.h>  //complex.hもインクルードされている
      を
    #include  <complex>
      に変更する。
  2. complex型の定義・宣言の変更
    double complex  a;
      を
    std::complex<double>  a;
      に変更する。using std::complex; をすれば std::を略せる。
  3. 追加
    #define  creal  real
    #define  cimag  imag
      を追加する。creal, cimagは std::real, std::imagに変更されている。また、
      この std::は何もしなくても略せる。
    const std::complex<double>  I(0.0,1.0);
      を追加する。Iは無くなっているため。
  4. ISO C++ 1998 のときにさらに追加
    #define  fabs(z)  sqrt(real(z)*real(z)+imag(z)*imag(z))
      fabsは無いので、real,imag,sqrtで計算する。2023/11/29
    g++ 4.8.5の ISO C++ 1998はなんか怪しそうなので使わない方がよい?

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS