C++ 头文件的解释
我试图发现一些库链接的含义,并在标题中找到:C++ 头文件的解释,c++,c,lapack,lapacke,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
#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##
可以理解为“通过将\u
放在lcname
的末尾来创建一个新令牌”
我假设引用的预处理器代码定义了一个预处理器宏LAPACK\u GLOBAL
,其用途如下:
#define LAPACK_something LAPACK_GLOBAL(something, SOMETHING)
在此之后,LAPACK\u something
的任何使用都将被以下内容之一所取代:
something
something_
SOMETHING
取决于环境。如果您针对每个您感到困惑的编译器指令单独拆分此问题,您可能会得到更多的回答。您可能不会得到解释上述代码中每个编译器指令的响应。