私はMatlabプログラマーであり、Cを何年も使用していません。ここで、Cでコードを記述し、MatlabからmexFunctionコマンドを介して呼び出す必要があります。ここまでは順調ですね。しかし、私のコードでは、引数と戻り値の両方が配列である多くの関数呼び出しが必要です。このために私はポインタリターンを使用しています。しかし、私は約100万の問題に遭遇しました。ある問題が修正されると、別の問題が発生します。
ソートコードの例は次のとおりです(実際のコードは大規模です)
#include "mex.h"
#include "math.h"
int Slength=95;
double innercfunction(double q,double y)
{
int i;
double X;
X=q*y;
}
double *c1function(double q,double Sim[])
{
double *F12=malloc(Slength);
int i;
double vdummy,qdummy;
qdummy=q;
for(i=0;i<Slength;i++)
{
vdummy=Sim[i];
F12[i]=innercfunction(qdummy,vdummy);
}
return F12;
}
void mexFunction(int nlhs, mxArray *prhs[],int nrhs,const mxArray *plhs[])
{
double *q=mxGetPr(prhs[0]);
double *Sim=mxGetPr(prhs[1]);
double *SS=c1function(q,Sim);
}
それをhelp_file.cとして保存し、MATLABワークスペースから次のようにコンパイルします。
mex -g help_file.c
次のエラーが発生します:
help_file.c: In function ‘mexFunction’:
help_file.c:38: error: incompatible type for argument 1 of ‘c1function’
help_file.c:17: note: expected ‘double’ but argument is of type ‘double *’
最初にvdummyの代わりにSim[i]を渡そうとしましたが、それは機能しませんでした。そのため、最初にダミー変数を定義しました。
これは些細な問題だと思いますが、それでも人々の助けをいただければ幸いです。