解读头文件

时间:2013-07-19 18:00:13

标签: c++ c lapack lapacke

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

#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 个答案:

答案 0 :(得分:2)

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

我假设引用的预处理器代码定义了预处理器宏LAPACK_GLOBAL,其目的是按如下方式使用:

#define LAPACK_something LAPACK_GLOBAL(something, SOMETHING)

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

something
something_
SOMETHING

取决于环境。