<p>基本上,您必须在<code>.pyx</code>或<code>.pxd</code>文件中重复头文件(.h),并在必要时进行适当的更改。在</p>
<p>对于你的简单例子,我不得不稍微改变一下。<code>C</code>代码有一些问题(在函数内部返回<code>int</code>,但将其声明为<code>void</code>,对于这种情况,所有的include都是不必要的。)</p>
<pre><code>int fib(int n){
int i = 2; /* Obviously 1 can divide all and 2 is the base of primality*/
while (i < n) {
if (n % i == 0){
return 0;
break;
}
else {
i = i + 1;
if (i == (n-1)){ return 1; }
}
}
return 0;
}
</code></pre>
<p>您的头在定义之后应该有一个<code>;</code>:</p>
^{pr2}$
<p>Cython文件类似于(我称为<code>my_cython.pyx</code>):</p>
<pre><code>cdef extern from './fib.h':
int fib(int n)
cdef extern from './fib.c':
pass
def function(n):
return fib(n)
</code></pre>
<p>然后,在编译之后,从一个普通的Python脚本:</p>
<pre><code>from my_cython import function
print function(10)
</code></pre>
<p>这个<code>cdef extern from *:</code>是一个技巧,如<a href="http://docs.cython.org/0.15/src/userguide/external_C_code.html" rel="nofollow">Cython's "Tricks and Tips"</a>所述。有时你必须补充:</p>
<pre><code>cdef extern from *:
pass
</code></pre>