2017-01-21 14 views
1

私の質問にいくつかの記事を読んだ。しかし、私はまだ次のことがわかりません:MATLAB Cコーダーリターンvoid

私は、findpeaks関数のcバージョンを生成するMatlabのcコーダーを生成しました。しかし、生成される関数はすべてvoidまたはstatic voidで始まります。それは関数が何も返さないことを意味しますか?

おかげで....関数の戻り値の型がvoidある場合

答えて

1

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に設定された配列になります。

+0

別のC関数でFoo関数を呼び出すと、xの値を1.0として取り出すことができますか? – Horgi

+0

最初の引数として0を渡した場合、xは1に設定されますが、どこで呼び出しても問題ありません。 – stijn

0

、関数は値を返しません。 Wikipedia's void type pageによれば

voidタイプは、CおよびAlgol68に由来するいくつかのプログラミング言語で、戻り、通常、その関数の結果の型であるが、その結果に値を提供しません発信者。通常、このような関数は、タスクの実行や出力パラメータへの書き込みなどの副作用のために呼び出されます。

1

関数は次のようになります場合:

void f(void); 

あなたはのようなものを言うことはできませんので、それは、その戻り値を経由して何かを返すことができない。しかし

int n = f(); 

を、関数は、ポインタを使用してパラメータリストを介して値を返すこともできます。

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

    ..... 

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

またはグローバル変数を設定します。

関連する問題