我试图发现一些库链接的含义,并在标题中发现了这一点:
#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
取决于环境。