Процессор Intel Math Kernel Library содержит этот бит кода в файле заголовка:Является ли приемлемой практикой наличие одного и того же идентификатора # define'd или typedef'ed, в зависимости от констант времени компиляции?
#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, что дает компилятору дополнительную информацию.
Рассматривается ли это приемлемая практика? Я предполагаю, что это должно быть, так как это реализовано Intel. Но я нашел это очень запутанным, пытаясь отладить некоторый код.
Почему typedef дает компилятору «больше информации»? – Mat
Почему загадочное сочетание C-style strypedefs и C++? –
@KerrekSB: библиотека поддерживает как C, так и C++, видимо, – Mat