1

我试图发现一些库链接的含义,并在标题中找到了这个:

#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

我不明白这些是做什么的,特别是在返回后缀的地方##_

谢谢

4

1 回答 1

2

在 C 预处理器中,##是标记连接运算符。因此lcname##_可以理解为“通过放在_末尾创建一个新令牌lcname”。

我假设引用的预处理器代码正在定义一个预处理器宏LAPACK_GLOBAL,其用途如下:

#define LAPACK_something LAPACK_GLOBAL(something, SOMETHING)

之后,任何使用LAPACK_something将被以下之一取代:

something
something_
SOMETHING

取决于环境。

于 2013-07-19T18:10:39.803 回答