用f2py包装的C函数只返回零

时间:2013-02-23 03:48:16

标签: python c f2py

我正在尝试使用f2py包装一个简单的C函数。它编译好了,但函数只返回零。我是C的新手,所以我很确定那里犯了一个愚蠢的错误。

例如,c文件:

#include <stdio.h>
#include <stdlib.h>
void Test(double x, double y)
{
  x = y*2;
}

pyf文件:

python module test
interface
   subroutine Test(x, y)        
     intent (c) Test  ! is a C function
     intent (c)         ! all arguments are considered as C based
     double precision intent(in)     :: x
     double precision intent(out)    :: y
   end subroutine Test
end interface
end python module test

3 个答案:

答案 0 :(得分:4)

要解决此问题,您需要

  1. 在@mgilson提到的.c函数中使用返回变量的指针,

    void Test(double *x, double y)
    {
       *x = y * 2;
    }
    
  2. .pyf接口中指定使用指针,这是偶然相同的大小为1的数组,

    double precision intent(out)   :: x(1)
    double precision intent(in)    :: y
    
  3. test.Test函数将返回不是标量,而是返回长度为1的numpy ndarray,包含该标量。不过,我不确定是否还有其他方法可以处理它。

答案 1 :(得分:2)

我不是C的专家,但我认为你的变量需要指向任何可以改变的东西:

void Test(double *x, double *y)
{
  *x = *y * 2;
}

答案 2 :(得分:0)

编辑:我的第一个答案是错误的,正如其他人所指出的那样,值确实应该作为指针传递给C.

void Test(double* x, double* y)
{
    *y = *x * 2;
}