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

#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预处理器中,##是 token 串联运算符。因此,lcname##_可以理解为“通过将_放在lcname的末尾来创建新 token ”。

我假设引用的预处理程序代码正在定义一个预处理程序宏LAPACK_GLOBAL,该宏应按如下方式使用:

#define LAPACK_something LAPACK_GLOBAL(something, SOMETHING)

之后,对LAPACK_something的任何使用将被以下之一替换:
something
something_
SOMETHING

取决于环境。

关于c++ - 头文件的解释,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/17752620/

10-12 01:27