我试图发现一些库链接的含义,并在标题中找到了这个:
#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
的末尾来创建一个新 token ”。
我假设引用的预处理器代码定义了一个预处理器宏LAPACK_GLOBAL
,它的用途如下:
#define LAPACK_something LAPACK_GLOBAL(something, SOMETHING)
之后,任何对 LAPACK_something
的使用都将被替换为以下之一:
something
something_
SOMETHING
视环境而定。
关于c++ - 头文件的解释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17752620/