主要内容

coder.rref

显示只读数据以引用的方式传递

描述

例子

coder.rref (参数)表明参数是一个只读的表达式或变量通过引用一个外部C / c++函数。使用coder.rref只有在一个coder.ceval调用。

coder.rref函数可以使代码生成器生成的代码优化。因为外部函数被认为不写coder.rref (arg),代码生成器可以执行优化表达折叠等作业参数之前和之后发生的coder.ceval调用。表达折叠是多个操作的结合到一个声明中避免使用临时变量和提高代码性能。

请注意

代码生成器假定你通过的记忆coder.rref (arg)是只读的。为了避免不可预知的结果,C / c++函数不能写信给这个变量。

另请参阅coder.refcoder.wref

例子

通过标量变量作为一个只读的参考

考虑到C函数addone返回的值常数输入+ 1:

双addone (const双* p){返回* p + 1;}

C函数定义了输入变量p作为一个指针指向一个常数翻倍。

通过输入通过引用addone:

y = 0;u = 42;y = coder.ceval (“addone”,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“双重use_struct (const struct MyStruct * my_struct){返回my_struct - > f1 + my_struct - > f2;}

C头文件,MyStruct.h,定义一个结构类型命名MyStruct:

的ifndef MYSTRUCT # define MYSTRUCT typedef struct MYSTRUCT{双f1;双f2;}MyStruct;双use_struct (const struct MyStruct * my_struct);# endif

MATLAB中®函数,通过结构作为一个只读的参考use_struct。表明结构类型年代有名字MyStruct这是C头文件中定义的MyStruct.h,使用coder.cstructname

函数y = foo% # codegeny = 0;coder.updateBuildInfo (“addSourceFiles”,“use_struct.c”);s =结构(“f1”,1“f2”2);coder.cstructname(年代,“MyStruct”,“外来的”,“HeaderFile”,“MyStruct.h”);y = coder.ceval (“use_struct”coder.rref (s));

生成独立的库代码,请输入:

codegen配置:自由喷火报告

通过结构字段为只读引用

s =结构(“s1 '结构(“一个”[0,1]));y = coder.ceval (“foo”coder.rref (s.s1.a));

你也可以通过结构的一个元素的数组:

c = repmat(结构体(“u”魔法(2)1 10);b = repmat(结构体(“c”c) 3、6);一个=结构(“b”,b);coder.ceval (“foo”coder.rref (a.b (3, 4) . c (2) .u));

输入参数

全部折叠

参数按引用传递给外部C / c++函数。参数不能是一个类,一个系统对象™,单元阵列或索引单元阵列。

数据类型:||int8|int16|int32|int64|uint8|uint16|uint32|uint64|逻辑|字符|结构体
复数的支持:金宝app是的

限制

  • 你不能通过引用传递这些数据类型:

    • 类或系统对象

    • 单元阵列或索引单元阵列

  • 如果一个属性的get方法,一组方法,或验证器,或者是一个系统对象属性与某些属性,那么你不能通过财产通过引用一个外部函数。看到按引用传递一些属性的不支持金宝app

提示

  • 如果参数是一个数组,然后呢coder.rref (arg)提供了数组的第一个元素的地址。的coder.rref (arg)功能不包含数组的大小的信息。如果C函数必须知道的元素数量的数据,通过这些信息作为一个单独的参数。例如:

    coder.ceval (“myFun”coder.rref (arg)、int32(元素个数(arg));
  • 当你通过结构通过引用一个外部C / c++函数,使用coder.cstructname提供一个C结构类型的名称是一个C头文件中定义。

  • 在MATLAB中,coder.rref会导致错误。用参数表示MATLAB代码,以便它可以运行在MATLAB和生成的代码,使用coder.target

  • 您可以使用coder.opaque声明变量传递给和从外部C / c++函数。

介绍了R2011a