このページの翻訳は最新ではありません。ここをクリックして,英語の最新版を参照してください。
生成コード内の変数の宣言
y = coder.opaque (
は,生成コード内で类型
)y
の変数宣言を指定した型で行い,初期値は指定しません。
y
には,変数または構造体フィールドを指定できます。
MATLAB®コードはy
に値を設定したりアクセスしたりすることはできませんが,外部C関数は,y
を引数として取ることができます。
y
は以下になります。
coder.rref
、coder.wref
またはcoder.ref
への引数
coder.ceval
への入力または出力引数
ユーザー作成のMATLAB関数への入力または出力引数
コード生成用にサポートされるMATLABツールボックス関数のサブセットへの入力
y
からの代入により,生成コード内で同じ型をもつ他の変数を宣言します。以下に例を示します。
y = coder.opaque (int);z = y;
int
型をもつ変数z
が宣言されます。coder.opaque
を使用して宣言された変数,またはcoder.opaque
を使用して宣言された変数を代入した変数のいずれかをy
に代入することができます。これらの変数は同じ型でなければなりません。
coder.opaque
を使用して宣言された変数,またはcoder.opaque
を使用して宣言された変数を代入した変数のいずれかと,y
を比較することができます。これらの変数は同じ型でなければなりません。
y = coder.opaque (___“HeaderFile”,
は型定義が含まれているヘッダーファイルを指定します。コードジェネレーターは,生成コードで必要とされるヘッダーファイルのHeaderFile
)# include
ステートメントを生成します。ヘッダーファイルの指定には,前の構文のいずれかを使用できます。
myfun
の呼び出しが成功したときに1
を返す関数valtest
のコードを生成します。この関数は,coder.opaque
を使用して,初期値0
をもつint
型変数x1
を宣言します。x2 = x1
の代入を行うと,x1
と同じ型と初期値をもつ変数x2
が宣言されます。
関数valtest
を記述します。
函数y = valtest% codegen%声明x1为一个初始值为“0”的整数x1 = coder.opaque (“int”,' 0 ');声明x2具有与x1相同的类型和初始值x1, x2 =x2 = coder.ceval (“myfun”);%通过比较x1的值来测试调用'myfun'的结果如果x = x y = 0;其他的y = 1;结束结束
fopen /从文件中读/文件关闭
を使用して独自のソースコードを返すMATLAB関数菲
のコードを生成します。この関数は,coder.opaque
を使用して,fopen /从文件中读/文件关闭
で使われるファイルポインターを格納する変数を宣言します。coder.opaque
の呼び出しにより,初期値零
,ヘッダーファイル< stdio . h >
をもつ文件*
型変数f
が宣言されます。
MATLAB関数菲
を記述します。
函数缓冲=鱼片% # codegen%声明'f'为不透明类型'FILE *',初始值为'NULL '%指定包含file *类型定义的头文件;f = coder.opaque (“文件*”,“零”,“HeaderFile”,' < stdio . h >”);%以二进制模式打开文件f = coder.ceval (fopen的装运箱(“filetest.m”),装运箱(rb的));%从文件中读取,直到到达并放置文件的末尾%内容进入缓冲区n = int32 (1);我= int32 (1);缓冲=字符(0 (8192));而n > 0%默认情况下,MATLAB转换常量值%在生成的代码中为双精度%,因此插入显式的类型转换到int32。n = coder.ceval (从文件中读的coder.ref(缓冲区(i)), int32 (1),...int32(元素个数(缓冲),f);I = I + n;结束coder.ceval (“关闭”f);缓冲= strip_cr(缓冲);在MATLAB字符向量的末尾添加一个C终止字符'\0'函数Y = cstring(x) Y = [x char(0)];%删除所有字符13 (CR),但保留字符10 (LF)函数if (j = 1, j = 1, j = 1);为i = 1:元素个数(缓冲)如果Buffer (i) ~= char(13);J = J + 1;结束结束缓冲(i) = 0;
coder.opaque
で宣言された変数の比較ファイルのオープンに成功したかどうかをテストするために,coder.opaque
で宣言された変数を比較します。
coder.opaque
を使用して,初期値零
をもつ文件*
型変数零
を宣言します。
null = coder.opaque (“文件*”,“零”,“HeaderFile”,' < stdio . h >”);
代入により,零
と同じ型と値をもつ別の変数ftmp
を宣言します。
ftmp =零;ftmp = coder.ceval (fopen的,(“testfile.txt”char (0)], [“r”char (0)));
変数の比較
如果ftmp = =零%错误条件结束
coder.opaque
を使用して宣言した変数の型とのキャストこの例では,coder.opaque
を使用して宣言されている変数の型へのキャストと型からのキャストを行う方法を示します。関数castopaque
はCの実行時関数strncmp
を呼び出して,文字列s1
およびs2
の最大n
個の文字を比較します。n
は短い方の文字列の文字数です。strncmp
の入力nsizet
として正しいCの型を生成するために,関数はn
をCの型size_t
にキャストして,その結果をnsizet
に割り当てます。関数はcoder.opaque
を使用してnsizet
を宣言します。出力retval
をstrncmp
から使用する前に,関数はretval
をMATLABの型int32
にキャストして,その結果をy
に保存します。
次のMATLAB関数を書き込みます。
函数y = castopaque (s1, s2)% <0 -第一个不匹配的字符在s1中的值小于s2中的值% 0 -两个字符串的内容相等% >0 -第一个不匹配的字符在s1中的值大于s2中的值%% # codegencoder.cinclude (' < string.h >”);N = min(numel(s1), numel(s2));%转换要与size_t比较的字符数nsizet =投(n,“喜欢”coder.opaque (“size_t”,' 0 '));%返回值为int类型retval = coder.opaque (“int”);retval = coder.ceval (“strncmp”, cstr(s1), cstr(s2), nsizet);%将不透明返回值转换为MATLAB值y =投(retval,“int32”);%--------------函数sc =装运箱(s)% NULL结束一个MATLAB字符向量为CSc = [s, char(0)];
墨西哥人関数を生成します。
codegencastopaquearg游戏{空白(3),空格(3)}报告
入力“abc”
および“abc”
を指定して墨西哥人関数を呼び出します。
castopaque_mex (“abc”,“abc”)
ans = 0
文字列が等しいため,出力は0
になります。
入力“abc”
およびabd的
を指定して墨西哥人関数を呼び出します。
castopaque_mex (“abc”,abd的)
ans = 1
2番目の文字列の3番目の文字d
が最初の文字列の3番目の文字c
より大きいため,出力は-1
になります。
入力abd的
および“abc”
を指定して墨西哥人関数を呼び出します。
castopaque_mex (abd的,“abc”)
ans = 1
最初の文字列の3番目の文字d
が2番目の文字列の3番目の文字c
より大きいため,出力は1
になります。
MATLABワークスペースでは,y
の型はint32
であると確認できます。
y
を初期値0の4バイト整数として宣言します。
y = coder.opaque (“int”,' 0 ',“大小”4);
类型
で指定される型をもつ价值
を指定します。それ以外の場合,生成されたコードから予期しない結果が生じる可能性があります。たとえば,次のcoder.opaque
宣言により予期しない結果が生じる場合があります。
y = coder.opaque (“int”,'0.2')
関数coder.opaque
は,変数の型を宣言します。変数のインスタンスは作成しません。後で,MATLABコードでこの関数を使用して,変数のインスタンスを作成することができます。以下の例では,関数coder.ceval
からfp1
に代入することで,fp1
のインスタンスが作成されます。
%声明类型为FILE *的fp1fp1 = coder.opaque (“文件*”);%创建变量fp1fp1 = coder.ceval (fopen的,(“testfile.txt”char (0)], [“r”char (0)));
MATLAB環境では,coder.opaque
は价值
で指定された値を返します。价值
を指定しない場合,空の文字ベクトルが返されます。
coder.opaque
を使用して宣言された変数またはcoder.opaque
を使用して宣言された変数から値を代入された変数を比較することができます。これらの変数は同じ型でなければなりません。以下に,これらの変数を比較する例を示します。coder.opaqueで宣言された変数の比較
生成コードで同じヘッダーファイルが何度もインクルードされるのを防ぐには,条件付きプリプロセッサ命令#如果未定义
および# endif
でヘッダーファイルを囲みます。次に例を示します。
#ifndef MyHeader_h #define MyHeader_h #endif . define MyHeader_h #endif . define MyHeader_h
MATLABの関数投
を使用して,変数をcoder.opaque
を使用して宣言されている変数にキャストするか,この変数からキャストします。数値型の場合のみcoder.opaque
を指定して投
を使用します。
coder.opaque
によって宣言された変数をMATLABの型にキャストするために,B =投(类型)
構文を使用できます。次に例を示します。
x = coder.opaque (' size_t ', ' 0 ');X1 = cast(x, 'int32');
B =投(“喜欢”,p)
構文を使うこともできます。次に例を示します。
x = coder.opaque (' size_t ', ' 0 ');X1 = cast(x, 'like', int32(0));
coder.opaque
によって宣言された変数の型にMATLAB変数をキャストするには,B =投(“喜欢”,p)
構文を使用しなければなりません。次に例を示します。
x = int32 (12);x1 = coder.opaque (“size_t”,' 0 ');X2 = cast(x, 'like', x1));
以下について,正しいデータ型を生成するにはcoder.opaque
を指定して投
を使用します。
coder.ceval
を使用して呼び出すC / c++関数への入力。
coder.ceval
を使用して呼び出すC / c++関数からの出力に割り当てられる変数。
このキャストを行わなくても,コード生成中にコンパイラの警告が表示されることがあります。