gpt4 book ai didi

python - numpy 的 c 源代码中的 at 符号 (@) 是如何使用的?

转载 作者:太空狗 更新时间:2023-10-30 02:26:10 26 4
gpt4 key购买 nike

我一直在细读 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 代码中使用过 @ 符号,所以我有点困惑...

最佳答案

因为这些文件是模板。如果我没记错的话,NumPy 使用了多个模板引擎(感谢 @user2357112 帮助我找到合适的引擎):

第二个实际上负责将这些文件转换为“常规”C 文件 - 在这些文件被编译之前。

基本上这些函数将被克隆很多次,并且对于每个函数,在 % 之间插入一个特殊的占位符。

例如in this case it begins with :

/**begin repeat
* #type = npy_float, npy_double, npy_longdouble#
* #ctype = npy_cfloat,npy_cdouble,npy_clongdouble#
* #c = f, , l#
* #C = F, , L#
* ....
*/

因此在第一次迭代中,@ctype@ 将被替换为 npy_cfloat 并且 @c@ 将被替换为 f@C@F:

static const npy_cfloat c_1f = {1.0F, 0.0};
static const npy_cfloat c_halff = {0.5F, 0.0};
static const npy_cfloat c_if = {0.0, 1.0F};
static const npy_cfloat c_ihalff = {0.0, 0.5F};

在下一次迭代中是@ctype@ npy_cdouble, ...

static const npy_cdouble c_1 = {1.0, 0.0};
static const npy_cdouble c_half = {0.5, 0.0};
static const npy_cdouble c_i = {0.0, 1.0};
static const npy_cdouble c_ihalf = {0.0, 0.5};

在第三次迭代中:

static const npy_clongdouble c_1l = {1.0L, 0.0};
static const npy_clongdouble c_halfl = {0.5L, 0.0};
static const npy_clongdouble c_il = {0.0, 1.0L};
static const npy_clongdouble c_ihalfl = {0.0, 0.5L};

然后将这些编译为普通的 C 文件。

关于python - numpy 的 c 源代码中的 at 符号 (@) 是如何使用的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45872234/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com