根据编译时常量,具有相同标识符#defined'd或typedef'ed被认为是可接受的做法吗?

时间:2012-01-12 19:27:49

标签: c++ types c-preprocessor alias preprocessor-directive

英特尔Math Kernel Library在头文件中包含以下代码:

#ifndef MKL_Complex16
typedef
struct _MKL_Complex16 {
    double real;
    double imag;
} MKL_Complex16;
#endif

here所述并讨论here,用户可以通过编写

来覆盖此结构定义
#define MKL_Complex16 std::complex<double>

包含头文件之前。使用此行,MKL_Complex16#define'd,这意味着字符串只是替换为文字字符std::complex<double>。如果没有,则为typedef'ed,这为编译器提供了更多信息。

这被认为是可接受的做法吗?我想它一定是,因为它是由英特尔实施的。但是我在尝试调试某些代码时发现它非常混乱。

1 个答案:

答案 0 :(得分:3)

这看起来很疯狂。我非常不愿意通过构建环境传递实际代码。如果有的话,请使用更高级别的标志:

#ifndef HAVE_STD_COMPLEX
    struct MKL_Complex16 { double real; double img; };
#else
#  include <complex>
   typedef std::complex<double> MKL_Complex16;
#endif