Интерпретация заголовочного файла

Я пытаюсь выяснить смысл некоторых библиотечных связей и нашел это в шапке:

#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

Я не понимаю, что они делают, особенно когда он возвращает суффикс ##_

Спасибо

1

Решение

В препроцессоре C, ## является оператором конкатенации токенов Так lcname##_ можно прочитать как «создать новый токен, поставив _ в конце lcname».

Я предполагаю, что цитируемый код препроцессора определяет макрос препроцессора LAPACK_GLOBAL который предназначен для использования следующим образом:

#define LAPACK_something LAPACK_GLOBAL(something, SOMETHING)

после чего любое использование LAPACK_something будет заменен одним из следующих:

something
something_
SOMETHING

в зависимости от окружающей среды.

2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]