MATLAB C编码器返回无效

时间:2017-01-21 13:20:55

标签: c matlab

我已经阅读了一些关于我的问题的帖子。但我仍然不确定以下内容:

我已经生成了Matlab的c编码器来生成findpeaks函数的c版本。但是,生成的函数都以void或static void开头。这是否意味着函数不会返回任何内容?

...谢谢

3 个答案:

答案 0 :(得分:1)

如果函数如下所示:

  void f(void);

然后它无法通过返回值返回任何内容,因此您无法说出以下内容:

  int n = f();

但是,函数也可以通过参数列表使用指针返回值:

  void f( int * p ) {
     * p = 42;
  }

  .....

  int n;
  f( & n );    // n now contains 42

或通过设置全局变量。

答案 1 :(得分:1)

C编码器生成的函数返回void,所以实际上没有,但是matlab函数返回的值被返回'通过指针或数组,它们在参数中排在最后,并且在生成的C代码中设置了它们的值。这是这样做的,因为matlab函数可以返回多个值,这些值在C中不能直接执行,除非返回例如结构左右。

假设你的matlab函数是

function [x,y] = Foo(a)
  x = a + 1.0
  y = 5 * ones(1,3)

然后生成的C函数声明应该类似于

void Foo(real_T a, real_T *x, real_T y[3]);

如果你称之为

real_T x;
real_T y[3];
Foo(0.0, &x, y);

然后x将设置为1.0,y将是一个所有元素都设置为5的数组。

答案 2 :(得分:0)

如果函数的返回类型为void,则函数不会返回任何值。

根据Wikipedia's void type page

  

来自C和Algol68的几种编程语言中的void类型是正常返回但不向调用者提供结果值的函数结果的类型 。通常,这些函数会因其副作用而被调用,例如执行某些任务或写入其输出参数。