指示通过引用传递的只读数据
coder.rref(
表明arg
)arg
是一个只读表达式或变量,通过引用传递给外部C/ c++函数。使用Coder.Rref.
只有在A内coder.ceval
呼叫。
该Coder.Rref.
功能可以使代码生成器能够优化生成的代码。因为外部函数被假定不写信coder.rref (arg)
,代码生成器可以在赋值时执行表达式折叠等优化arg
发生在之前和之后coder.ceval
呼叫。表达式折叠是将多个操作的组合成一个语句,以避免使用临时变量并提高代码性能。
注意
代码生成器假设您传递的内存coder.rref (arg)
是只读的。为了避免不可预知的结果,C/ c++函数不能写入这个变量。
考虑c函数adjone.
返回一个常量输入加1的值:
双addone(const double * p){return * p + 1;}
C函数定义输入变量P.
作为指向常量double的指针。
通过引用传递输入adjone.
:
......y = 0;u = 42;y = coder.ceval('附加',coder.rref(u));......
......U = 1;v = 2;y = coder.ceval('my_fcn',coder.rref(u),coder.rref(v));......
......x = myClass;x.prop = 1;y = coder.ceval('foo'coder.rref (x.prop));......
表示结构类型在C头文件中定义,使用coder.cstructname
。
假设你有C函数use_struct
。此函数从输入参数中读取,但不会写入它。
#include“mystruct.h”double divult_struct(const struct mystruct * my_struct){return my_struct-> f1 + my_struct-> f2;}
c头文件,MyStruct.h
,定义名为mystruct.
:
#ifndef MYSTRUCT #define MYSTRUCT typedef struct MYSTRUCT {double f1;双f2;} MyStruct;const struct my_struct *my_struct;# endif
在你的matlab中®功能,将结构传递为只读引用use_struct
。表示结构类型S.
有名字mystruct.
它在C头文件中定义MyStruct.h
,使用coder.cstructname
。
函数y = foo%#codegen.y = 0;Coder.updateBuildInfo(“addSourceFiles”那'use_struct.c');s = struct('f1',1,“f2”,2);编码器.cstructName(s,'mystrict'那“外来的”那'头球文件'那'mystruct.h');y = coder.ceval('use_struct',编码器.rref(s));
要生成独立库代码,输入:
Codegen.配置:自由Foo-报告
......s = struct('s1',struct('一个',[0 1]));y = coder.ceval('foo'coder.rref (s.s1.a));......
你也可以传递一个结构数组的元素:
......c = repmat(结构('U'魔法(2)1 10);b = repmat(结构体('C',c),3,6);a = struct('B',b);Coder.CEVAL('foo',编码器.RREF(A.B(3,4).c(2).u));......
你不能通过引用传递这些数据类型:
类或系统对象
单元格数组或索引到单元阵列中
如果属性具有get方法、set方法或验证器,或者是具有某些属性的系统对象属性,那么您就不能通过引用将属性传递给外部函数。看到通过引用不支持某些属性万博1manbetx。
如果arg
是一个数组,然后是coder.rref (arg)
提供数组的第一个元素的地址。该coder.rref (arg)
函数不包含有关数组大小的信息。如果C函数必须知道数据的元素数,请将该信息作为单独的参数传递。例如:
Coder.CEVAL('myfun',coder.rref(arg),int32(numel(arg));
通过引用外部C / C ++功能通过结构,使用coder.cstructname
提供在C头文件中定义的C结构类型的名称。
在matlab,Coder.Rref.
导致错误。参加MATLAB代码,以便它可以在MATLAB和生成的代码中运行,使用编码器.Target.
。
您可以使用coder.opaque
声明传递给外部C/ c++函数和从外部C/ c++函数传递的变量。