Я пытаюсь выяснить смысл некоторых библиотечных связей и нашел это в шапке:
#ifndef LAPACK_GLOBAL
#if defined(LAPACK_GLOBAL_PATTERN_LC) || defined(ADD_)
#define LAPACK_GLOBAL(lcname,UCNAME) lcname##_
#elif defined(LAPACK_GLOBAL_PATTERN_UC) || defined(UPPER)
#define LAPACK_GLOBAL(lcname,UCNAME) UCNAME
#elif defined(LAPACK_GLOBAL_PATTERN_MC) || defined(NOCHANGE)
#define LAPACK_GLOBAL(lcname,UCNAME) lcname
#else
#define LAPACK_GLOBAL(lcname,UCNAME) lcname##_
#endif
#endif
Я не понимаю, что они делают, особенно когда он возвращает суффикс ##_
Спасибо
В препроцессоре C, ##
является оператором конкатенации токенов Так lcname##_
можно прочитать как «создать новый токен, поставив _
в конце lcname
».
Я предполагаю, что цитируемый код препроцессора определяет макрос препроцессора LAPACK_GLOBAL
который предназначен для использования следующим образом:
#define LAPACK_something LAPACK_GLOBAL(something, SOMETHING)
после чего любое использование LAPACK_something
будет заменен одним из следующих:
something
something_
SOMETHING
в зависимости от окружающей среды.
Других решений пока нет …