我一直在阅读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代码编译成python模块时,@name@
是distutils
使用的某种宏吗?在
我以前从未在c代码中见过@
符号,所以我有点困惑。。。在
因为这些文件是模板。如果我没记错的话,NumPy使用了几个模板引擎(感谢@user2357112帮我找到了合适的一个):
第二个程序实际上负责将这些文件转换为“常规”C文件—在这些文件被编译之前。在
基本上,这些函数将被克隆很多次,对于每个函数,在
%
之间插入一个特殊的占位符。在例如in this case it begins with:
因此在第一次迭代中,}将被{}和{}替换为{}:
^{pr2}$@ctype@
将被npy_cfloat
替换,而{在下一个迭代中是
@ctype@
npy_cdouble
。。。在在第三次迭代中:
然后将这些文件编译为普通的C文件。在
相关问题 更多 >
编程相关推荐