我正在尝试使用Cython而不是Python import time
直接加载time.h,但它不起作用。
我得到的只是一个错误
Call with wrong number of arguments (expected 1, got 0)
使用以下代码
cdef extern from "time.h" nogil:
ctypedef int time_t
time_t time(time_t*)
def test():
cdef int ts
ts = time()
return ts
和
Cannot assign type 'long' to 'time_t *'
使用以下代码
cdef extern from "time.h" nogil:
ctypedef int time_t
time_t time(time_t*)
def test():
cdef int ts
ts = time(1)
return ts
使用数学日志我可以简单地做
cdef extern from "math.h":
double log10(double x)
时间怎么可能无法实现?
答案 0 :(得分:4)
time
的参数是要填充或NULL的time_t
值的地址(即:"指针")。
引用man 2 time
:
<强>
time_t time(time_t *t);
强>[...]
如果t为非NULL,则返回值也存储在t。
指向的内存中
一些标准函数的奇怪之处在于返回一个值并且(可能)在提供的地址中存储相同的值。将0
作为参数传递是绝对安全的,因为在大多数架构中 NULL 等同于((void*)0)
。在这种情况下,time
只会返回结果,并且不会尝试将其存储在提供的地址中。
答案 1 :(得分:1)
将NULL传递给时间。您也可以使用内置的libc.time:
from libc.time cimport time,time_t
cdef time_t t = time(NULL)
print t
给出了
1471622065