c++ - 头文件的解释

标签 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

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

谢谢

最佳答案

在 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/

相关文章:

c++ - 为什么 I/O 相关设置会导致段错误?

c - OpenGL 鼠标 "lock"

Python 函数作为 C++ 中的参数

c++ - 如何在 C++ 中深度复制 char * 数组

c++ - 计算直线上点的投影的优化函数?

linux - Makefile 搜索库文件

c++ - FindBLAS 和 FindLAPACK 在 CMake 中的使用

c++ - 测试 CUDA 11 cusolverDnDSgels()

c++ - Visual C++ express 2010 程序入口点 ??1task_group_context@tbb@@QAE@XZ 无法位于动态链接库 tbb.dll 中

c - 在 ANSI C 程序中,如何将数组元素作为参数传递给要修改的函数?