我已经阅读了一些关于我的问题的帖子。但我仍然不确定以下内容:
我已经生成了Matlab的c编码器来生成findpeaks函数的c版本。但是,生成的函数都以void或static void开头。这是否意味着函数不会返回任何内容?
...谢谢
答案 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
,则函数不会返回任何值。
来自C和Algol68的几种编程语言中的
void
类型是正常返回但不向调用者提供结果值的函数结果的类型 。通常,这些函数会因其副作用而被调用,例如执行某些任务或写入其输出参数。