主要内容

このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。

coder.wref

参照渡しする書き込み専用データを示す

説明

coder.wref (参数は,参数が外部C / c++関数に参照渡しする書き込み専用の式または変数であることを示します。coder.wrefcoder.ceval呼び出し内でのみ使用します。外部関数はデータから読み取らないものと想定されているため,この関数により,コードジェネレーターはMATLAB®コードで参数への前の代入を無視することで,生成されたコードを最適化できます。外部コードで参数のすべての要素に書き込み,メモリを完全に初期化します。

メモ

C / c++関数はcoder.wref (arg)で参照されるメモリを完全に初期化しなければなりません。C / c++コードで参数のすべての要素に値を代入してメモリを初期化します。生成コードが未初期化メモリから読み取ろうとする場合,未定義の実行時動作を引き起こす可能性があります。

coder.refcoder.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.hMyStructという名前の構造体型を定義します。

#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));...

入力引数

すべて折りたたむ

外部C / c++関数に参照渡しする引数。引数をクラス、系统对象™,细胞配列,细胞配列へのインデックスにすることはできません。

データ型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑|字符|结构体
複素数のサポート:あり

制限

  • 次のデータ型を参照で渡すことはできません。

    • クラスまたは系统对象

    • 细胞配列または细胞配列へのインデックス

  • プロパティに得到メソッド,集メソッド,または検証関数がある場合,またはプロパティが特定の属性をもつ系统对象プロパティである場合,そのプロパティを外部関数に参照で渡すことはできません。一部のプロパティでサポートされない参照渡しを参照してください。

ヒント

  • 参数が配列の場合,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++関数との間で受け渡す変数を宣言できます。

R2011aで導入