我正在尝试发现某些库链接的含义,并在标题中找到了这个:
#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
我不明白这些是做什么的,特别是它返回后缀##_
由于
答案 0 :(得分:2)
在C预处理器中,##
是令牌连接运算符。因此,lcname##_
可以理解为“通过将_
放在lcname
的末尾来创建新令牌。”
我假设引用的预处理器代码定义了预处理器宏LAPACK_GLOBAL
,其目的是按如下方式使用:
#define LAPACK_something LAPACK_GLOBAL(something, SOMETHING)
之后,LAPACK_something
的任何使用都将被以下之一取代:
something
something_
SOMETHING
取决于环境。