【发布时间】:2018-02-02 23:06:41
【问题描述】:
我一直在阅读一些 numpy 的源代码,我注意到很多 c 源代码都使用@variablename@ 的构造。例如,在文件“npy_math_complex.c.src”(位于here)中:
/*==========================================================
* Constants
*=========================================================*/
static const @ctype@ c_1@c@ = {1.0@C@, 0.0};
static const @ctype@ c_half@c@ = {0.5@C@, 0.0};
static const @ctype@ c_i@c@ = {0.0, 1.0@C@};
static const @ctype@ c_ihalf@c@ = {0.0, 0.5@C@};
@ctype@ 和 @c@ 是什么意思?这些是某种宏吗?我猜它们不是普通的 C 宏,因为我查看了文件中列出的相关头文件,它们似乎没有使用“@”定义任何宏。
@name@ 是 distutils 在将 c 代码编译成 python 模块时使用的某种宏吗?
我以前从未在 c 代码中看到过 @ 符号,所以我有点困惑......
【问题讨论】:
-
它被某种模板引擎用来生成多个非常相似的函数,并替换了
@标记的部分,但我从未弄清楚他们使用的是什么模板系统或确切的细节生成什么代码。 -
注意文件名
npy_math_complex.c.src是一个线索...... -
numpy 文档在这里给出了一个非常简短的概述:numpy.org/devdocs/reference/distutils_guide.html#other-files