在生成的代码中声明变量
y=编码器(
声明一个变量类型
)Y
使用指定的类型,并且在生成的代码中没有初始值。
Y
可以是一个变量或一个结构字段。
MATLAB®代码无法设置或访问Y
,但外部C函数可以接受Y
作为论据。
Y
可以是:
论据编码器
,编码器
或编码参考
输入或输出参数到塞瓦尔编码员
用户编写的MATLAB函数的输入或输出参数
代码生成所支持的MATLAB工具箱函数子集的输入金宝app
赋值的Y
在生成的代码中声明另一个具有相同类型的变量。例如:
y=编码器。不透明('int');z=y;
Z
类型int
在生成的代码中。您可以指定Y
从另一个使用不透明编码器
或从使用不透明编码器
。变量必须具有相同的类型。
你可以比较Y
到另一个使用不透明编码器
或从使用不透明编码器
。变量必须具有相同的类型。
为函数生成代码勇敢的
返回1.
如果召唤我的乐趣
成功。此函数使用不透明编码器
声明变量x1
带类型int
初始值0
. 任务x2=x1
宣布x2
类型和初始值为的变量x1
。
写一个函数勇敢的
。
作用y=valtest%编码基因%声明x1为一个初始值为“0”的整数x1 = coder.opaque (“int”,'0');%声明x2与x1具有相同的类型和初始值x2=x1;x2=coder.ceval(“我的乐趣”);%通过比较x1的值来测试调用“myfun”的结果如果x2==x1 y=0;其他的y=1;终止终止
生成MATLAB函数的代码文件测试
它使用fopen/fread/fclose
. 此函数使用不透明编码器
声明存储所用文件指针的变量的步骤fopen/fread/fclose
。调用不透明编码器
声明变量F
带类型文件*
,初始值无效的
,和头文件
。
编写一个MATLAB函数文件测试
。
作用缓冲区=文件测试%#编码基因%将“f”声明为初始值为“NULL”的不透明类型“FILE*”%指定包含file *类型定义的头文件;f=编码器(“文件*”,“空”,“头文件”,' < stdio . h >”);%以二进制模式打开文件f=编码器.ceval(“福彭”,cstring('filetest.m'),装运箱(“rb”));%从文件中读取,直到到达文件末尾并放入%内容进入缓冲区n=int32(1);i=int32(1);buffer=char(零(18192));虽然n>0%默认情况下,MATLAB转换常量值%在生成的代码中加倍%因此插入了到int32的显式类型转换。n=coder.ceval(“弗瑞德”coder.ref(缓冲区(i)), int32 (1),...int32(numel(缓冲区)),f;i=i+n;终止塞瓦尔编码员(“fclose”,f);缓冲区=剥离区(缓冲区);在MATLAB字符向量的末尾添加一个C终止字符'\0'作用y=cstring(x)y=[x字符(0)];%删除所有字符13 (CR),但保留字符10 (LF)作用缓冲区=带材(缓冲区)j=1;对于i=1:numel(缓冲区)如果缓冲区(i)~=char(13)缓冲区(j)=缓冲区(i);j=j+1;终止终止缓冲区(i)=0;
不透明编码器
比较使用不透明编码器
测试是否成功打开文件。
使用不透明编码器
声明变量无效的
带类型文件*
初始值无效的
。
空=编码器。不透明(“文件*”,“空”,“头文件”,' < stdio . h >”);
使用赋值来声明另一个变量ftmp
具有与相同的类型和值无效的
。
ftmp=null;ftmp=coder.ceval(“福彭”, [“testfile.txt”,char(0)][“r”,char(0)];
比较变量。
如果ftmp==null%错误条件终止
不透明编码器
此示例演示如何向使用不透明编码器
. 功能卡斯托不透明
调用C运行时函数strncmp
顶多比较N
字符串的字符s1
和s2
。N
字符串中较短的字符数。若要为strncmp
输入恩西泽特
,函数强制转换N
到C类型尺寸
并将结果赋给恩西泽特
.函数使用不透明编码器
要申报的恩西泽特
。在使用输出之前复述
从strncmp
,函数强制转换复述
到MATLAB类型int32
并将结果存储在Y
。
编写以下MATLAB函数:
作用y=不透明(s1,s2)% <0 -第一个不匹配的字符在s1中的值小于s2中的值%0-两个字符串的内容相等%>0-第一个不匹配的字符在s1中的值大于s2中的值%%#编码基因编码员(“” )n=min(numel(s1),numel(s2));%将要比较的字符数转换为大小\u tnsizet=cast(n,“喜欢”,coder.不透明(“尺寸”,'0'));%返回值为int类型retval=coder.不透明(“int”);retval=coder.ceval(“strncmp”,cstr(s1),cstr(s2),nsizet);%将不透明返回值转换为MATLAB值y=铸造(返回,“int32”);%--------------作用sc=cstr(s)%C的MATLAB字符向量的NULL终止sc=[s,char(0)];
生成MEX函数。
编码基因卡斯托不透明-args{空白(3),空白(3)}报告
使用输入调用MEX函数“abc”
和“abc”
。
castopaque_mex (“abc”,“abc”)
ans=0
输出是0
因为字符串是相等的。
使用输入调用MEX函数“abc”
和“阿布德”
。
castopaque_mex (“abc”,“阿布德”)
ans = 1
输出是-1
因为第三个角色D
第二个字符串中的字符大于第三个字符C
在第一个字符串中。
使用输入调用MEX函数“阿布德”
和“abc”
。
castopaque_mex (“阿布德”,“abc”)
ans=1
输出是1.
因为第三个角色D
中的第一个字符串大于第三个字符C
在第二个字符串中。
在MATLAB工作区中,您可以看到Y
是int32
。
声明Y
为初始值为0的4字节整数。
y=编码器(“int”,'0',“尺寸”, 4);
指定一个价值
那是那种类型
指定。否则,生成的代码可能会产生意外的结果。例如,以下不透明编码器
声明可能会产生意外的结果。
y=编码器。不透明('int','0.2')
不透明编码器
声明变量的类型。它不实例化变量。您可以在后面的MATLAB代码中使用它来实例化变量。在下面的例子中,赋值fp1
从塞瓦尔编码员
实例化fp1
。
%声明文件类型的fp1*fp1=编码器(“文件*”);%创建变量fp1fp1 = coder.ceval (“福彭”, [“testfile.txt”,char(0)][“r”,char(0)];
在MATLAB环境下,不透明编码器
返回中指定的值价值
如果价值
如果未提供,则返回空字符向量。
您可以比较使用以下两种方法声明的变量:不透明编码器
或从使用不透明编码器
。变量必须具有相同的类型。下面的示例演示如何比较这些变量。比较使用coder.opaque声明的变量
为了避免在生成的代码中包含多个相同的头文件,请将头文件括在条件预处理器语句中#ifndef
和#恩迪夫
。例如:
#ifndef MyHeader_h #define MyHeader_h #endif . define MyHeader_h #endif . define MyHeader_h
你可以使用MATLAB铸造
函数将变量强制转换为使用不透明编码器
使用铸造
具有不透明编码器
仅适用于数字类型。
强制转换由声明的变量不透明编码器
对于MATLAB类型,可以使用B=铸件(A型)
语法。例如:
x=编码器。不透明('size_t','0');x1=cast(x,'int32');
您也可以使用B=铸造(A,'like',p)
语法。例如:
x=编码器。不透明('size_t','0');x1=cast(x,'like',int32(0));
将MATLAB变量强制转换为声明的变量类型不透明编码器
,您必须使用B=铸造(A,'like',p)
语法。例如:
x=int32(12);x1=coder.不透明('size_t','0');x2=cast(x,'like',x1));
使用铸造
具有不透明编码器
要为生成正确的数据类型,请执行以下操作:
使用调用的C/C++函数的输入塞瓦尔编码员
。
分配给使用调用的C/C++函数的输出的变量塞瓦尔编码员
。
如果没有此强制转换,则可能在代码生成期间收到编译器警告。