私の質問にいくつかの記事を読んだ。しかし、私はまだ次のことがわかりません:MATLAB Cコーダーリターンvoid
私は、findpeaks関数のcバージョンを生成するMatlabのcコーダーを生成しました。しかし、生成される関数はすべてvoidまたはstatic voidで始まります。それは関数が何も返さないことを意味しますか?
おかげで....関数の戻り値の型がvoid
ある場合
私の質問にいくつかの記事を読んだ。しかし、私はまだ次のことがわかりません:MATLAB Cコーダーリターンvoid
私は、findpeaks関数のcバージョンを生成するMatlabのcコーダーを生成しました。しかし、生成される関数はすべてvoidまたはstatic voidで始まります。それは関数が何も返さないことを意味しますか?
おかげで....関数の戻り値の型がvoid
ある場合
Cコードで生成される関数はvoidを返します。実際には何もありませんが、matlab関数によって返される値は、引数の最後に来るポインタや配列を介して返されます。コード。これは、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に設定された配列になります。
、関数は値を返しません。 Wikipedia's void type pageによれば
:
void
タイプは、CおよびAlgol68に由来するいくつかのプログラミング言語で、戻り、通常、その関数の結果の型であるが、その結果に値を提供しません発信者。通常、このような関数は、タスクの実行や出力パラメータへの書き込みなどの副作用のために呼び出されます。
関数は次のようになります場合:
void f(void);
あなたはのようなものを言うことはできませんので、それは、その戻り値を経由して何かを返すことができない。しかし
int n = f();
を、関数は、ポインタを使用してパラメータリストを介して値を返すこともできます。
void f(int * p) {
* p = 42;
}
.....
int n;
f(& n); // n now contains 42
またはグローバル変数を設定します。
別のC関数でFoo関数を呼び出すと、xの値を1.0として取り出すことができますか? – Horgi
最初の引数として0を渡した場合、xは1に設定されますが、どこで呼び出しても問題ありません。 – stijn