このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
参照渡しする書き込み専用データを示す
coder.wref (
は,参数
)参数
が外部C / c++関数に参照渡しする書き込み専用の式または変数であることを示します。coder.wref
はcoder.ceval
呼び出し内でのみ使用します。外部関数はデータから読み取らないものと想定されているため,この関数により,コードジェネレーターはMATLAB®コードで参数
への前の代入を無視することで,生成されたコードを最適化できます。外部コードで参数
のすべての要素に書き込み,メモリを完全に初期化します。
メモ
C / c++関数はcoder.wref (arg)
で参照されるメモリを完全に初期化しなければなりません。C / c++コードで参数
のすべての要素に値を代入してメモリを初期化します。生成コードが未初期化メモリから読み取ろうとする場合,未定義の実行時動作を引き起こす可能性があります。
coder.ref
とcoder.rref
も参照してください。
C関数init_array
があるとします。
Void init_array(double* array, int numel) {for(int I = 0;我<元素个数;I ++){数组[I] = 42;}}
C関数は入力変数数组
を双へのポインターとして定義します。
C関数init_array
を呼び出して,y
のすべての要素を42に初期化します。
...Y = 0 (5,10);coder.ceval (“init_array”coder.wref (Y), int32(元素个数(Y)));...
...U = 0 (5,10);V = 0 (5,10);coder.ceval (“my_fcn”coder.wref (U)、int32(元素个数(U), coder.wref (V), int32(元素个数(V)));...
...x = myClass;x.prop = 1;coder.ceval (“foo”coder.wref (x.prop));...
構造体型がCヘッダーファイルで定義されることを示すには,coder.cstructname
を使用します。
C関数init_struct
があるとします。この関数は,入力引数への書き込みは行いますが,入力引数からの読み取りは行いません。
#include "MyStruct.h" void init_struct(struct MyStruct *my_struct) {my_struct->f1 = 1;my_struct - > f2 = 2;}
CヘッダーファイルMyStruct.h
はMyStruct
という名前の構造体型を定義します。
#ifndef MYSTRUCT #define MYSTRUCT {double f1;双f2;} MyStruct;void init_struct(struct MyStruct *my_struct);# endif
MATLAB関数で,構造体をinit_struct
に書き込み専用として渡します。coder.cstructname
を使用して,年代
の構造体型にCヘッダーファイルMyStruct
で定義された名前MyStruct.h
が付いていることを示します。
函数y = foo% # codegeny = 0;coder.updateBuildInfo (“addSourceFiles”,“init_struct.c”);s =结构(“f1”, 1“f2”2);coder.cstructname(年代,“MyStruct”,“外来的”,“HeaderFile”,“MyStruct.h”);coder.ceval (“init_struct”coder.wref (s));
スタンドアロンのライブラリコードを生成するには,以下を入力します。
codegen配置:自由喷火报告
...s =结构(“s1 '结构(“一个”[0, 1]));coder.ceval (“foo”coder.wref (s.s1.a));...
構造体の配列の要素を渡すこともできます。
...c = repmat(结构体(“u”魔法(2)1 10);b = repmat(结构体(“c”c) 3、6);一个=结构(“b”, b);coder.ceval (“foo”coder.wref (a.b (3, 4) . c (2) .u));...
次のデータ型を参照で渡すことはできません。
クラスまたは系统对象
细胞配列または细胞配列へのインデックス
プロパティに得到メソッド,集メソッド,または検証関数がある場合,またはプロパティが特定の属性をもつ系统对象プロパティである場合,そのプロパティを外部関数に参照で渡すことはできません。一部のプロパティでサポートされない参照渡しを参照してください。
参数
が配列の場合,coder.wref (arg)
は配列の最初の要素のアドレスを提供します。関数coder.wref (arg)
に,配列のサイズに関する情報は含まれません。C関数がデータの要素数を把握しなければならない場合、その情報を別の引数として渡します。次に例を示します。
coder.ceval (“myFun”coder.wref (arg)、int32(元素个数(arg));
外部C / c++関数に構造体を参照渡しする場合,coder.cstructname
を使用してCヘッダーファイルで定義されるC構造体型の名前を指定します。
MATLABでは,coder.wref
はエラーになります。MATLABコードをパラメーター化して MATLAB と生成されたコード内で実行できるようにするには、coder.target
を使用します。
coder.opaque
を使用して,外部C / c++関数との間で受け渡す変数を宣言できます。