英特尔Math Kernel Library在头文件中包含以下代码:
#ifndef MKL_Complex16
typedef
struct _MKL_Complex16 {
double real;
double imag;
} MKL_Complex16;
#endif
来覆盖此结构定义
#define MKL_Complex16 std::complex<double>
包含头文件之前。使用此行,MKL_Complex16
为#define
'd,这意味着字符串只是替换为文字字符std::complex<double>
。如果没有,则为typedef
'ed,这为编译器提供了更多信息。
这被认为是可接受的做法吗?我想它一定是,因为它是由英特尔实施的。但是我在尝试调试某些代码时发现它非常混乱。
答案 0 :(得分:3)
这看起来很疯狂。我非常不愿意通过构建环境传递实际代码。如果有的话,请使用更高级别的标志:
#ifndef HAVE_STD_COMPLEX
struct MKL_Complex16 { double real; double img; };
#else
# include <complex>
typedef std::complex<double> MKL_Complex16;
#endif