FFTW:如何防止破坏别名规则?

时间:2013-08-23 17:36:58

标签: c++ fftw strict-aliasing

我有一个使用std::complex<double>类型的代码。 来自FFTW Manual

  

如果您有变量complex<double> *x,则可以通过reinterpret_cast<fftw_complex*>(x)将其直接传递给FFTW。

但是,当我在我的代码中执行此操作时:

tmp_spectrum = reinterpret_cast<std::complex<double>*>(fftw_alloc_complex(conf.spectrumSize()));
plan_bw_temp = fftw_plan_dft_c2r_1d(conf.FFTSize(), reinterpret_cast<fftw_complex*>(tmp_spectrum), tmp_out, FFTW_ESTIMATE);

我得到dereferencing type-punned pointer might break strict-aliasing rules [-Wstrict-aliasing]。 如何解决这个警告?谢谢!

1 个答案:

答案 0 :(得分:0)

这里有三个选项:

  • 只需在需要fftw_complex时创建fftw_plan_dft_c2r_1d(conf.FFTSize(), fftw_complex(tmp_spectrum.real(), tmp_spectrum.imag()), tmp_out, FFTW_ESTIMATE);fftw_complex
  • 不要在代码中使用C ++语言的复杂类型,只使用-fno-strict-aliasing类型。
  • 使用{{1}}在相应的翻译单元中禁用所有严格别名优化和强制执行。仅警告静音是安全,因为它可能导致代码损坏。