我正在挖掘NumPy的核心,试图找出为什么它不适合我(64位Cygwin和Windows 8.1),我来到了this file。
当编译命中rad2deg()
函数(粘贴在下面)时,我得到一个segmentation fault。看看这个文件,代码中有大量的“@”符号。它 * 看起来 * 像某种通配符标记,或者预处理器标记,但我在任何地方都找不到有关它的任何信息。
#define LOGE2 NPY_LOGE2@c@
#define LOG2E NPY_LOG2E@c@
#define RAD2DEG (180.0@c@/NPY_PI@c@)
#define DEG2RAD (NPY_PI@c@/180.0@c@)
@type@ npy_rad2deg@c@(@type@ x) {
return x*RAD2DEG;
}`
代码中还有其他地方,编译器不会因'@'字符而阻塞。
有没有一个搜索词可以解释这一点?
1条答案
按热度按时间0x6upsns1#
好吧,我想明白了。
这是一些非标准的预处理器技巧,可能在为NumPy构建C代码的Python代码中实现。
它遍历代码,用注解块中的标记替换代码中的@包围的标记,生成三个几乎相同的代码块,操作不同的数据类型。
我怀疑segfault可能来自不正确的数据类型;我们会看到的。